嵌入式Linux C语言程序设计基础教程:内存管理与动态分配.pdfVIP

嵌入式Linux C语言程序设计基础教程:内存管理与动态分配.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

10.1内存管理

内存的使用是程序设计中需要考虑的重要因一,这不仅由于系统内存是有限的

(尤其在嵌入式系统中),而且内存分配也会直接影响到程序的效率。因此,读者要对C

语言中的内存管理,有个系统的了解。

在C语言中,定义了4个内存区间:代码区;全局变量与静态变量区;局部变量区

即栈区;动态区,即堆区。下面分别对这4个区进行介绍。

①代码区。代码区中主要存放程序中的代码,属性是只读的。

②全局变量与静态变量区。也称为静态区域。内存在程序编译的时候就已经分配

好,这块内存在程序的整个运行期间都存在。例如:全局变量、静态变量和字符串常量。

分配在这个区域中的变量,当程序结束时,才释放内存。因此,经常利用这样的变量,

在函数间传递信息。

③栈区。在栈上创建。在执行函数时,函数内局部变量的单元都可以在栈上创

建,函数执行结束时这些单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率

很高,但是分配的内存容量有限。在linux系统中,通过命令“ulimit–s”,可以看到,栈的容量

为8192kbytes,即8M。

这种内存方式,变量内存的分配和释放都自动进行,程序员不需要考虑内存管理的问题,很

方便使用。但缺点是,栈的容量有限制,且当相应的范围结束时,局部变量就不能在使用。

④堆区。有些操作对象只有在程序运行时才能确定,这样编译器在编译时就无法为他们预先分

配空间,只能在程序运行时分配,所以称为动态分配。比如:下面的结构体定义:

10.1内存管理

内存的使用是程序设计中需要考虑的重要因素,这不仅是由于系统内存有限的其

中之一(尤其是在嵌入式系统中),而且内存分配也直接影响到程序的效率。因此,

要对C语言中的内存管理,有一个系统的了解。

在C语言中,定义了4个内存区间:代码区;全局变量与静态变量区;局部变量区

即栈区;动态区,即堆区。下面分别对这4个区进行介绍。

1代码区。代码区中主要是货架程序中的代码,属性是串口的。

2全局变量已经与静态变量区。也叫静态区域。内存在程序编译的时候就分配

好,这块内存在程序的整个运行期间都存在。例如:全局变量、静态变量和字符串常

量。分配在这个区域中的变量,当程序结束时,才释放内存。因此,经常使用这样的

变量,在函数间传递信息。

3栈区。在栈上创建。在执行函数时,函数局部变量的单元都可以在栈上创建,函

数执行结束时这些单元自动被释放。栈内存分配占用了处理器的指令集中效率,但是分配

的内存容量有限。在linux系统中,命令通过“ulimit–s”,可以看到,栈的容量为

8192kbytes,即8M。

内存方式,变量内存的分配和释放都自动进行,这个需要考虑内存管理的问题,很方便使

用。但缺点是,栈的容量有限制,且当相应的范围结束时,局部变量就不能在使用。

4堆区。有些操作对象只有在程序运行时才能确定,这样编译器在编译时就无法为它们预先

分配空间,只能在程序运行时分配,所以称为动态分配。比如:下面的结构体定义:

structemployee

{

charname[8];

intage;

chargender;

floatsalary;

};

在该结构体定义中,员工的是用字符数组来。若员工的由用户输入,则只有在

用户输入结束后,才能精确的知道,需要多少内存,在这种情况下,使用动态内存分配更合乎逻

辑,应该把结构体的定义改成下面的形式:

structemployee

{

char*name;

intage;

chargender;

floatsalary;

};

动态分配内存就是在堆区上分配。程序在运行的时候用mall

文档评论(0)

guchengyong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档