凌阳教育的个人空间 https://blog.eetop.cn/204849 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

内存管理

已有 399 次阅读| 2016-4-5 16:19

内存的使用是程序设计中需要考虑的重要因素之一,这不仅由于系统内存是有限的,而且内存分配也会直接影响到程序的效率。因此,我们要对C语言中的内存管理,有个系统的了解。

C语言中,定义了4个内存区间:代码区;全局变量与静态变量区;局部变量区即栈区;动态存储区,即堆区。下面对四个区进行介绍。

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

②全局变量与静态变量区。也称为静态存储区域。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如:全局变量、静态变量和字符串常量。分排在这个区域中的变量,当程序结束时,才释放内存。因此,经常利用这样的变量,在函数间传递信息。

③栈区。在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。在linux系统中,通过命令“ulimit-s”,可以看到,栈的容量为8192kbytes,即8M

这种内存方式,变量内存的分配和释放都自动进行,程序员不需要考虑内存管理的问题,很方便使用。但缺点是,栈的容量有限制,且当相应的范围结束时,局部变量就不能在使用。

④堆区。有些操作对象只有在程序运行时才能确定,这样编译器在编译时就无法为他们预见分配空间,只能在程序运行时分配,所以称为动态分配。比如:下面的结构体定义:

struct employee

{

char name[8];

int age;

char gender;

float salary;

};   

在该结构体定义中,员工的姓名是用字符数组来存储。员工的姓名由用户输入,则只有在用户输入结束后,才能精确的知道,需要多少内存,在这种情况下,使用动态内存分配更合乎逻辑,应该把结构体的定义改成下面的形式:   

struct employee

{

char 星号name;

int age;

char gender;

float salary;

}

动态分配内存就是堆区上分配。程序在运行的时候用molloc申请任意多少的内存,程序员自己负责在何时用free释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

下面的这段程序说明了不同类型的内存分配。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

/星号C语言中的数据的分配内存星号/

int a=0;

char 星号p1;

int main()

{

       int b;                                   /星号b在栈星号/

       char s[]="abc";                     /星号s在栈,"abc在常量区"星号/

       char 星号p2;                      /星号p2在栈星号/

       char 星号p3="123456";              /星号"123456"在常量区,p3在栈星号/

       static int c=0;                /星号可读可写数据段星号/

      

       p1=(char 星号)malloc(10);   /星号分配得来的10个字节的区域在堆区星号/

       p2=(char 星号)malloc(20);   /星号分配得来的20个字节的区域在堆区星号/

       /星号从常量区的“Hello World”字符串复制分配到的堆区星号/

       strcpy(p1,"Hello World");

      

       return 0;

}

凌阳教育,全国唯一一家原厂式嵌入式培训机构,专业从事嵌入式人才培训13年,最近新开课程信息安全工程师培训,想了解更多嵌入式资料下载或者是凌阳教育的动态,请访问凌阳教育官网www.sunplusedu.com


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 1

    获赞
  • 3

    评论
  • 3815

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-28 21:26 , Processed in 0.016330 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部