嵌入式系统中,内存分配方式使用什么方式?

嵌入式系统常用的内存分配方法
[问题点数:40分,结帖人oneblack]
嵌入式系统常用的内存分配方法
[问题点数:40分,结帖人oneblack]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年11月 Linux/Unix社区大版内专家分月排行榜第二2011年8月 Linux/Unix社区大版内专家分月排行榜第二2008年10月 C/C++大版内专家分月排行榜第二
2012年8月 Linux/Unix社区大版内专家分月排行榜第三
匿名用户不能发表回复!|嵌入式系统中,内存分配使用什么方式?_百度知道
嵌入式系统中,内存分配使用什么方式?
我有更好的答案
静态分配与动态分配
采纳率:36%
为您推荐:
其他类似问题
内存分配的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。嵌入式系统里为什么要引入内存池这个概念? - 捷配电子市场网
嵌入式系统里为什么要引入内存池这个概念?
作者:hd12 栏目:
嵌入式系统里为什么要引入内存池这个概念?以下是ruanhaishen&&R&S内核的作者的解释:/*******************************************************************一个内存池(pool)是由N个固定尺寸的内存块(Block)组成,如{10, 3}代表一个内存池包含了3个10字节大小的内存块。如果申请一个5字节的内存块kmalloc(5)那么这个内存池就可以满足并返回一块(Blocks)给应用。虽然应用只需要5个字节,但是内存池是把整块(10字节)返回。这样虽然浪费了5个字节空间,但不会带来内存碎片的问题,这在嵌入式系统中是非常重要的。如果需要一个20字节的空间怎么办?那上面的内存池就没法满足了,因为每一块的尺寸只有10字节。为了满足所有不同的尺寸需求,比如系统中最大需要字节的内存块,我们可以使用一个大尺寸的内存池如 {, 100}。这样就有了100个字节内存块(Blocks)虽然满足了所有的需求,但对于kmalloc(5)也需要浪费掉一个字节的Block,这样的内存利用率是很低的。更好的方法就是开辟多个不同尺寸的内存池{32,100}{256,100}{512,60}{,20}对于kmalloc(5)、kmalloc(),分别使用不同的内存池分配。这样可大大提高内存使用效率。明白这点就不难划分内存池,具体划分方法是要根据应用对动态内存需求来规划的。特别是内存资源很有限的系统,是需要仔细合理的安排。注:实际上每一个Block需要预留一个管理用的结构,大小占用一个指针空间(ARCH_PTR_SIZE的定义),如:满足kmalloc(5),需要定义Block至少为(5+ARCH_PTR_SIZE)*******************************************************************/我还是没看懂,所以来这里请各位高手来帮我解决:1.为什么要引入内存池这个功能?做应用程序的临时数据存储吗?如果是这&&样,能不能拿它用于两程序间的数据交换?2.为什么要固定内存池块的大小,如果很多程序都不能完全利用一个块,那不&&是浪费很多内存?3.这片内存池在内存中的地址是不是固定的?4.内存池是不是不管有没有应用程序申请使用其中的内存,它都会占这么大&&内存空间,除非内存池调度程序操作,其他程序或系统调用永远不会用到这&&部分内存?
作者: computer00 于
12:29:00 发布:
简单的说说在操作系统中,任务要动态的增加和减少,这就需要内存的管理和分配,需要建立任务时就分配一些内存给它,任务运行完成后释放内存,给其它任务使用。要管理内存,必须要知道哪些内存是还未使用,哪些已经在使用的,这就需要建立一个表来记录。如果将内存分成一个个的块,这样用来记录的那张表就可以比较小。例如在我的ARM_00_OS中,一个内存块的大小是16字节,申请内存时,至少有16字节。虽然是浪费了一些,但是大部分情况下要申请较大块的内存,例如1K,那么浪费几字节就无所谓了。内存池地址是固定的,如果没有分配,那么它就是空闲的,其它任务是不能使用的。 * - 本贴最后修改时间: 12:41:46 修改者:computer00
作者: hd12 于
14:14:00 发布:
谢谢,这样的话我就懂了这样的解释我懂了。此外“能用于两任务间的数据交换或通信吗?”是不是有10个任务,在编译前定义“块”的个数时,就至少要预定义10个这样的块?文中提到定义多个不同尺寸的块,如果是这样的话,多个不同尺寸的块是不是在一个运行的系统中共存? * - 本贴最后修改时间: 14:37:57 修改者:hd12
作者: rockos 于
15:14:00 发布:
一种动态内存管理方式内存池是一种动态内存管理方式, 没有什么神秘的.你把堆叫做内存池也没有什么不可以的, 的区别只在于堆空间是全系统共用的,而内存池可能只在某一个,或某几个联系非常紧密的模块之间使用(所以一般也提供不同的API).&内存池&只代表一种方法, 用不着把它概念化.
作者: computer00 于
2:32:00 发布:
不清楚他为何要弄成大小不一样的块……我的系统是固定大小的块如果要大内存的话,那么多分配几个块就行了。他这样做应该是为了防止内存碎片导致无大块的内存可用吧,不过我觉得可以通过内存整理来获取大块内存啊。
作者: rockos 于
10:15:00 发布:
re圈圈, 大小不同的块有两个目的:* 减少申请小块内存时的剩余空间浪费* 减少控制结构数量, 也就减少了控制结构对内存的消耗比如系统中大量需要&512字节的动态内存, 少量地需要1~2M字节的动态内存, 总可用空间假设为4M, 如果全部使用512字节块的话就需要4M/512 = 个内存块控制结构.但是如果分成两种, 512字节和1M大小的块, 假设各2M, 就只需要2M/512 + 2M/1M =
+ 2 = 个控制结构, 节省了一半的控制结构空间.
作者: csword 于
10:45:00 发布:
hoho1.为什么要引入内存池这个功能?-&引入内存池目的是便于操作系统管理内存做应用程序的临时数据存储吗?-&一般用于操作系统自己申请使用如果是这样,能不能拿它用于两程序间的数据交换?-&可以,如果malloc函数返回值是物理地址的话,但有时候有可能有操作系统保护的问题,具体问题具体分析。2.为什么要固定内存池块的大小-&方便管理池块,如果很多程序都不能完全利用一个块,那不&&是浪费很多内存?-&所以内存池被划分成不同大小的池块,以尽量减少浪费3.这片内存池在内存中的地址是不是固定的?-&不一定固定,看系统怎么做了,有可能临时申请一页来做内存池。4.内存池是不是不管有没有应用程序申请使用其中的内存,它都会占这么大&&内存空间,除非内存池调度程序操作,其他程序或系统调用永远不会用到这&&部分内存?-&还是要看系统怎么做了,有些系统可能一开始就初始化一段固定区域来做内存池,那么这块区域不管有没有应用程序申请使用内存都被永远占着,此谓占着茅厕不拉屎。有些系统直到有应用程序申请内存时才会临时急急忙忙的去申请一块区域来做内存池,然后初始化之,再在其中吝啬巴巴的找一块尽量小而又满足你的需要的地方给你,此谓临时抱佛脚。
作者: rockos 于
10:58:00 发布:
问答挺多, 就是不全面啊问答挺多, 就是不全面, 有些内容也不能让人信服.而且让人看不懂是面向多地址空间OS的还是单地址空间OS的.
作者: eleven11 于
11:10:00 发布:
不错内存管理的优劣和3点有关:1:内存管理结构的资源占用 2:可分配内存检索的速度和命中率 3:内存分配大小的灵活性和最小额外损耗至于内存碎片问题,除非你的系统分配了相对小的内存数目多,同时又不释放而产生的,只要确保内存会得到释放就不成问题csword理解有误,内存块就是一开始分配好的,如果有32kram,那至少要分配30kram给内存块,然后程序运行的时候动态分配,比如文件系统运行的时候用12k,运行完了就还给内存块,其他运行的程序可以分配到,内存分配就是为了实现内存共享 * - 本贴最后修改时间: 15:05:03 修改者:eleven11
作者: hd12 于
13:49:00 发布:
谢谢大家的帮助首先谢谢大家的帮助, csword 回答的条理很清楚,疑问解决了很多了。看来不同的系统对内存的控制方法不同,要等到我对这个操作系统完全入门了,才会没一点疑问。大家对这个东西的理解如果有什么高见,希望能发表出来。努力学习中! * - 本贴最后修改时间: 13:51:49 修改者:hd12
作者: computer00 于
14:04:00 发布:
如果你对内存分配感兴趣的话,可以去看看在我OS中是如何实现的&
作者: hd12 于
16:56:00 发布:
作者: db10 于
12:27:00 发布:
computer00 他写了一个这样程序&我已经用上了。
作者: computer00 于
12:48:00 发布:
那只是ARM-00-OS中的一部分,如果有什么改进和提议的话,希望发上来交流交流~~~
作者: Sureal 于
14:14:00 发布:
作者: FINEAMY 于
18:26:00 发布:
FINEAMY哈哈,这些问题要理解深刻,不容易.和LINUX这个实现了几乎所有内存管理问题的大系统来比,上面的方法只是一些&星星点点&的内存管理方法.简单的说,开辟多个不同尺寸的内存池在于解决内寸碎片,这个其实是实现了一个最简单,最原始的&伙伴系统&---一个著名的解决内存内部碎片问题的解决方法.想想看,固定一块内存大小来分配,与这个可变内寸块大小分配的分配方案,哪个更浪费内存.当然还要考虑连续地址分配. * - 本贴最后修改时间: 18:28:32 修改者:FINEAMY
作者: aningai 于
15:16:00 发布:
简化以下再看&
作者: AIRWILL 于
21:24:00 发布:
内存池也只是象malloc 一般完成多任务, 多模块间分时地使用有限的同一内存空间的一种管理方式
作者: 极限思考 于
15:21:00 发布:
好见解,收藏了。&
讨论内容:
Copyright &
www.dzsc.com 浙ICP证030469号基于嵌入式系统的内存管理方案--《杭州电子科技大学》2012年硕士论文
基于嵌入式系统的内存管理方案
【摘要】:随着嵌入式技术的不断发展,嵌入式系统在人们的社会生活中得到了广泛的应用。针对嵌入式系统内存分配具有高效性、可靠性和实时性等要求,每种嵌入式系统结合自己的实际应用情况,都采用自己的内存管理方案。
PTmalloc作为当前嵌入式系统的主流内存管理方案,其稳定性、全面性等特点决定了其在嵌入式系统中的地位。但PTmalloc对多线程情况下大批量的内存申请、释放的处理速度不能很好的满足路由器等设备的要求,并可能造成极大的内存空间浪费。本文从PTmalloc的基本原理出发分析了PTmalloc的优点和缺点,得出了PTmalloc对大批量内存处理速度慢的原因:arena与线程不是严格的一一对应,从而导致了频繁的加解锁操作。
Tcmalloc作为应用于服务器的内存管理方案,其对多线程情况下大批量的内存申请、释放的处理速度能很好的满足路由器等设备的要求。本文从tcmalloc的基本原理出发分析了tcmalloc的优点和缺点,得出了tcmalloc会导致嵌入式系统所不能容忍的内存浪费。
本文结合PTmalloc与tcmalloc的优、缺点,提出了一种新的内存管理方案,主要体现在以下几个方面:
1)以tcmalloc的多级缓存为基本框架,引用PTmalloc的切割方式来实现内存块的切割;
2)根据实际的应用情况,细化内存块的分类;
3)引入缓存控制机制来控制缓存,降低内存浪费;
4)提供内存诊断功能来用于帮助解决非法内存操作而导致的各种bug;
通过在实际设备上的测试,本内存管理方案对多线程情况下大批量内存申请、释放的处理速度要比PTmalloc好,内存缓存而导致的内存浪费情况得到了很好的解决。
【学位授予单位】:杭州电子科技大学【学位级别】:硕士【学位授予年份】:2012【分类号】:TP333
欢迎:、、)
支持CAJ、PDF文件格式
【参考文献】
中国期刊全文数据库
吴清平,刘明业;[J];兵工自动化;1999年03期
吴晓勇,曾家智;[J];成都信息工程学院学报;2005年01期
,熊光泽;[J];单片机与嵌入式系统应用;2005年01期
杨鹏;[J];高等函授学报(自然科学版);2002年04期
俞勤丰;孙涌;;[J];计算机工程;2009年11期
顾胜元;杨丹;黄海伦;;[J];计算机工程;2009年20期
邢建生;王永吉;刘军祥;曾海涛;NASRO Min-A;[J];软件学报;2007年07期
王铮;李志军;;[J];计算机技术与发展;2007年03期
董明峰,谷建华;[J];微电子学与计算机;2004年07期
王小银;陈莉君;;[J];西安邮电学院学报;2011年04期
中国硕士学位论文全文数据库
曹营;[D];大连理工大学;2010年
高峰;[D];沈阳工业大学;2007年
李满丽;[D];厦门大学;2009年
【共引文献】
中国期刊全文数据库
李士松;;[J];安徽师大学报(自然科学版);1990年04期
杨立身;王中海;;[J];长春师范学院学报;2007年04期
包得海;火克华;;[J];电脑学习;2010年06期
涂凌鸣;廖雁;;[J];电脑知识与技术;2011年30期
陈南西;田学隆;陈桂;;[J];单片机与嵌入式系统应用;2007年02期
张剑伟;;[J];单片机与嵌入式系统应用;2011年06期
赵媛,万元元,张棕澄;[J];电子工程师;2001年10期
谢银桥;李广军;;[J];福建电脑;2006年07期
毕伟宏;;[J];福建电脑;2007年02期
包得海;;[J];甘肃高师学报;2011年02期
中国重要会议论文全文数据库
姚玉坤;乔彬;;[A];2009中国仪器仪表与测控技术大会论文集[C];2009年
丁锐;张亚君;陈维;;[A];浙江省电子学会2011学术年会论文集[C];2011年
冯新国;陶志成;;[A];第十一届全国数据库学术会议论文集[C];1993年
中国博士学位论文全文数据库
赵国冬;[D];哈尔滨工程大学;2011年
李毅;[D];电子科技大学;2001年
单锦辉;[D];国防科学技术大学;2002年
宋柱梅;[D];华南理工大学;2007年
伍微;[D];国防科学技术大学;2009年
徐战亚;[D];中国地质大学;2010年
中国硕士学位论文全文数据库
刘承磊;[D];山东农业大学;2009年
曹营;[D];大连理工大学;2010年
满莎;[D];湘潭大学;2010年
梁远征;[D];华东师范大学;2010年
张清;[D];西安工业大学;2011年
刘建君;[D];沈阳工业大学;2011年
李玉翠;[D];吉林大学;2011年
王磊;[D];西华大学;2011年
阮伟;[D];南京大学;2011年
张利宏;[D];内蒙古大学;2011年
【二级参考文献】
中国期刊全文数据库
吴清平,刘明业;[J];兵工自动化;1999年03期
吴晓勇,曾家智;[J];成都信息工程学院学报;2005年01期
田令平;;[J];电脑知识与技术;2006年11期
Jean Labrosse
,Michael Barr
,周东,何小庆;[J];单片机与嵌入式系统应用;2003年09期
,熊光泽;[J];单片机与嵌入式系统应用;2005年01期
吴平;;[J];单片机与嵌入式系统应用;2006年03期
贺炎,刘曙霞;[J];电子科技;2004年05期
谢敏;李桥梁;;[J];电子科技;2005年12期
李飞;[J];电子世界;2003年10期
谢银桥;李广军;;[J];福建电脑;2006年07期
中国硕士学位论文全文数据库
秦怀峰;[D];西北工业大学;2002年
徐蓉;[D];电子科技大学;2004年
于以序;[D];电子科技大学;2005年
柴继国;[D];电子科技大学;2006年
李满丽;[D];厦门大学;2009年
柳艳莉;[D];哈尔滨工业大学;2008年
【相似文献】
中国期刊全文数据库
庞胜利;;[J];西安邮电学院学报;2010年03期
黄健;;[J];科技资讯;2008年08期
魏长江,张凌云,李国财;[J];煤矿机械;2005年08期
黄贤英,王越,陈媛;[J];计算机工程与设计;2004年10期
王铮;李志军;;[J];计算机技术与发展;2007年03期
刘东栋;;[J];电子科技;2007年02期
张磊;王忠仁;;[J];实验科学与技术;2007年02期
刘邓;陈波;刘婷婷;;[J];微计算机信息;2008年02期
刘东栋;;[J];科学技术与工程;2007年06期
张为;;[J];湖南工业大学学报;2008年06期
中国重要会议论文全文数据库
姚玉坤;乔彬;;[A];2009中国仪器仪表与测控技术大会论文集[C];2009年
张家奇;于飞;;[A];冶金轧制过程自动化技术交流会论文集[C];2005年
陈福;周树杰;林小竹;杨跃翔;;[A];2004全国测控、计量与仪器仪表学术年会论文集(下册)[C];2004年
孙柏林;;[A];04'中国企业自动化和信息化建设论坛暨中南六省区自动化学会学术年会专辑[C];2004年
冯斌;张恩军;隗娜;;[A];2006电力系统自动化学术交流研讨大会论文集[C];2006年
刘树鑫;曹云东;侯春光;刘晓明;;[A];第一届电器装备及其智能化学术会议论文集[C];2007年
朱芳;章坚武;;[A];浙江省电子学会第七次会员代表大会暨2007学术年会论文集[C];2007年
董治华;张林锐;刘亮;;[A];第十九届测控、计量、仪器仪表学术年会(MCMI'2009)论文集[C];2009年
李光先;陆阳;;[A];全国第13届计算机辅助设计与图形学(CAD/CG)学术会议论文集[C];2004年
梁磊;洪永强;;[A];福建省科协第四届学术年会提升福建制造业竞争力的战略思考专题学术年会论文集[C];2004年
中国重要报纸全文数据库
;[N];中国高新技术产业导报;2004年
龚炳铮;[N];中国石油报;2003年
王晓涛;[N];中国经济导报;2010年
艾文;[N];中国计算机报;2001年
;[N];人民邮电;2008年
朱挺;[N];中国高新技术产业导报;2008年
本报记者  凡晓芝;[N];计算机世界;2006年
周晨;[N];科技日报;2007年
;[N];中国计算机报;2002年
郭淳学;[N];中国电子报;2008年
中国博士学位论文全文数据库
程国达;[D];复旦大学;2003年
赵国冬;[D];哈尔滨工程大学;2011年
柴志雷;[D];复旦大学;2006年
陈文智;[D];浙江大学;2005年
郭军;[D];西北大学;2007年
张付祥;[D];哈尔滨工业大学;2007年
刘传波;[D];武汉理工大学;2009年
刘大亮;[D];北京邮电大学;2009年
徐成;[D];武汉理工大学;2006年
卜爱国;[D];东南大学;2006年
中国硕士学位论文全文数据库
杜敏;[D];复旦大学;2009年
李满丽;[D];厦门大学;2009年
柴继国;[D];电子科技大学;2006年
王维;[D];天津财经大学;2007年
吴显伟;[D];哈尔滨理工大学;2009年
马健;[D];北京邮电大学;2009年
李楠;[D];沈阳工业大学;2010年
李丹丹;[D];东北大学;2005年
丁锐;[D];杭州电子科技大学;2012年
付波;[D];电子科技大学;2005年
&快捷付款方式
&订购知网充值卡
400-819-9993

我要回帖

更多关于 c语言内存分配方式 的文章

 

随机推荐