| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3227 人关注过本帖
标题:c语言单片机和操作系统内存管理系统到底怎么理解,内存泄漏溢出
只看楼主 加入收藏
zjwwyhello
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-12-2
收藏
 问题点数:0 回复次数:1 
c语言单片机和操作系统内存管理系统到底怎么理解,内存泄漏溢出
一个白天加一个黑夜研究c语言单片机的内存管理、内存泄漏、内存溢出,还没摸出个清清楚楚出来。愈闷,还有很多问题似懂非懂不明白。请高手帮忙就疑问指点一二(写到问号后面):也希望与各位新手共同进步,通过此来释放疑惑。
一、有操作系统的嵌入式产品
1:用操作系统写代码时,所谓的操作系统内存管理系统的都有些什么函数?或者这些malloc,calloc,new与free,delete之流的函数就是统称为内存管理系统吗? 还是内存管理系统是另外的函数群我们看不到,这几个只是内存的开辟与删除而已,称不上管理级别?
2:操作系统关于内存的管理的流程是怎么样的,是不是第1步,系统启动后初始化空闲堆内存链表,第2步,接收子函数的堆申请(内存块脱离链表),第3步,堆内存回收(被申请的块多余部分重新挂到链表上)?如果产品开发是在操作系统上开发的,这些工作不用我们自己去做是吗?我们只做像malloc、free之类的使用是吗?那操作系统的管理系统什么时候会开启,定时扫描,还是等空闲内存快没了或已经没了才去回收?
二、没操作系统的单片机产品
3:单片机如果不用操作系统来开发,就一定不能用标准c库的calloc与free之类的函数吗?所谓的“不能用”是编译都通不过还是用了会在多次调用后造成堆、栈泄漏或溢出?溢出原因是程序并没有内存回收函数总有一天会耗尽吗?
4:常听说,你单片机是用库开发的吗?这个所谓的“库”是指什么?是指标准c库,还是芯片公司出的用于定时器、gpio、中断等方面的“库函数”? 又或者指的是针对芯片而对标准c库进行改造后的特制c库?(因为我常看到针对某芯片的c编译器安装包)。
5:我们常看到针对某芯片的c编译器安装包里,是不是这种安装包里就有类似标准C库的函数?它们是不是效仿标准c库结合芯片特点做出来的库,很多情况函数名是相同的,也有可能删除一些标准c里有的,增加些标准c里没有的函数吗? 那么就有另一个问题,这个标准c库又是以什么为参照呢?是windows系统吗?我们平时说的标准c库就是针对windows吗?如果想把这个标准c库用在没有操作系统的单片机开发里,里面的个别函数(特别是内存管理使用类)或多或少都会需要有所改动吗?
6:没操作系统的单片机代码用安装的针对芯片的c编译器来开发,如果程序用了calloc、free之类的函数,也能编译通过,没什么提示警告,是不是还不能表明不会因此出泄漏内存的故障?也就是说这个针对芯片的c编译器未必帮你自动加了内存回收函数?那换言之,这种针对性的c编译器有没有自动帮我们往程序里加内存自动回收功能的情况?或者说这种针对性的c编译器,有没有改造了如标准c库里malloc、free这种函数?让它们也能建立类似堆链表的东西,让申请堆时能找到未被使用或经free掉的堆,在free掉时也能让堆回到空闲堆链表上去,以此实现类似操作系统的内存管理功能呢?
7:无论用标准c库,还是改过的c库,要想实现calloc与free之类的函数正确无误使用,无论如何都是要建立空闲堆的标识的管理工作吗?这种建立空闲堆标识的管理工作就是我们常说的c语言内存管理吗?
8:标准c库free函数,只是在堆属性参数里把标识改了,并不是真正把该内存挂回空闲堆链表上,是因为想方便我们程序可能某时刻还要重新使用这个堆的数据吗?有释放堆就把它挂回空闲堆链表的函数吗?如果没有,那么这个真正的堆回收工作,只能靠另外的函数程序来回收吗?那么这个回收程序怎么知道我还要不要用呢?或者回收程序只要自己内存吃紧不管三七二十一只要看你是堆属性是free状态的,先回收了给其它程序用了再说,下回你要用,重新给你开辟?重新开辟后,数据不是没了吗?那又要重新生成数据了,反正如此,为什么还要早些时候free掉时蹲着茅坑不拉屎多吃一举做什么?有什么好处?
9:总结之,无操作系统的程序要用calloc与free,一定要自己写个内存管理系统吗?看到管理系统这几个字,总联想到要让程序自动发现什么时候需要回收堆这样的事。网上有实例写的函数名字类似calloc_us,free_us,看起来好象就是用来代替标准c库的calloc与free函数的,虽然没看到它们是怎么应用的,但是否通过改写calloc与free函数就能达到管理的要求呢?或者说根本不可能,或者说如果可能,为什么操作系统还要搞个回收系统干嘛?
搜索更多相关主题的帖子: 管理系统 单片机 操作系统 嵌入式 c语言 
2016-12-02 14:45
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
也许是我的了解太浅薄了,也许是楼主考虑的太多了。大部分单片机只是控制外设接口并进行简单的处理,或者向上位机发送数据,用到内存管理的不多,单片机内置也就那么点内存,扩充内存管理起来也不方便,通常也没有这个必要,复杂一点的数据处理都会交给PC机去完成。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2016-12-02 21:11
快速回复:c语言单片机和操作系统内存管理系统到底怎么理解,内存泄漏溢出
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019579 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved