3336|5

7815

帖子

57

TA的资源

裸片初长成(中级)

楼主
 

【靠谱例程联盟】 20131231 malloc/free 和 堆 的问题,本质上是 (堆)内存管理 [复制链接]

本帖最后由 辛昕 于 2013-12-31 21:03 编辑

        我实在无意引起新一波讨论:
       关于在单片机上使用malloc/free的问题。

       我之前写了一个基于 malloc/free的 CStyleString.作为一个做单片机为主的我来说,我当然是希望它们可以用于单片机。是的,也许String功能对于单片机意义不大,但是类似于的vector意义可就大了。而它们同样涉及这对 堆内存管理 的需求。

        我知道你们随便跑出一个人都会告诉我
        "在单片机上用动态分配是找死。"
        ——或者类似的话。

       然而,我还是决定继续往下走。此前,我翻阅了包括 PJP的C标准库,C和指针 在内的好几本 C经典,但发现它们只是提到怎么使用这些函数。却完全没有我想要的答案

      “在单片机上动态分配内存,需要注意什么?”

       这里面一个关键是,单片机这种资源稀缺型系统,内存非常有限。而且他不比PC机,随随便便就有一个操作系统——几乎所有的操作系统都提供了 内存管理功能。我知道一些嵌入式操作系统的大致方案,就是一点都不动态,是使用静态内存。
   
        其实C标准库本身,与任何操作系统的实现无关,也不依赖操作系统,因此它本身是非常独立的。而且阅读C标准库你会发现,其实C的实现者并不只知道PC机和windows或者linux。他们同样知道其他各类包括我们的单片机在内的各种 计算机硬件。
        因此它们已经考虑得够多了。

       而很多时候我只希望,我可以,“妥善的使用,正确的使用 已经有的成熟技术”,然后免除许多麻烦。
       一直忘了今天是2013年最后一天,所幸,花了几个晚上考虑的一个问题,总算找到一个更贴切的 路标:
       内存管理


此帖出自编程基础论坛

最新回复

String和Vector也是通过动态申请来实现的,so,你用他们一点意义都没有,还不如直接调用malloc/free  详情 回复 发表于 2017-11-13 19:51
点赞 关注
个人签名

强者为尊,弱者,死无葬身之地

 

回复
举报

603

帖子

1

TA的资源

纯净的硅(中级)

沙发
 
在单片机或者嵌入式系统里用动态分配其实没什么。堆只是传说中的概念,从本质上讲,堆只是一个静态全局数组,操作它的外部接口函数只有malloc和free。很多小型嵌入式系统都提供了动态申请内存的方法,只不过,出于空间效率和时间效率的考虑,更多的时候可能会考虑使用所谓不动态的固定块的方式,很少的时候,也会有使用按字节分配的方式。“动态申请内存”,不过就是一个拥有“巨大”内存空间(数组)的模块而已,我们只是调它的接口,向它借用空间,并适时归还。所谓动态的机制,无非就是这个模块的实现手段罢了。

在我眼里,变量没有谭老师书里讲的那么复杂,而是只有两种:局部的变量,在调用栈里临时保存;全局的变量,在内存中长久保存。
再进一步,其实栈也不过就是一个全局的数组而已。
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

板凳
 
用c++的string或者vector干
然后封装一个 c接口即可。

这是我后来想到的最好的办法。
我是说,在单片机上用。

1941
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

6037

帖子

195

TA的资源

版主

4
 
辛昕 发表于 2017-11-13 18:16
用c++的string或者vector干
然后封装一个 c接口即可。

这是我后来想到的最好的办法。
我是说,在单片 ...

String和Vector也是通过动态申请来实现的,so,你用他们一点意义都没有,还不如直接调用malloc/free
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

5
 
lcofjp 发表于 2017-11-13 19:51
String和Vector也是通过动态申请来实现的,so,你用他们一点意义都没有,还不如直接调用malloc/free

然而c++这种语言不是自带一定的gc机制么?
总好过C没有,要依靠操作系统提供的吧。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

6
 

原来在2013年,我果然是一点都不知道RTOS

此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表