程序在内存中存储详情(Text、Data、BSS、Heap、Stack....)

先看下面的一段程序:

char *string = "Hello World";
int iSize;

char *fun(void)
{
     char *p;
     iSize = 8;
     p = malloc(iSize);
    
return p;
}

存放的位置(相同的颜色对应)


Text段:上面标记为红色的部分(还包括整个fun函数,由于下边需要,所以没有标记)都存放在Text段,Text段用来存放代码(二进制文件)和常量,该段的数据通常是只读的

例:

char *p = "Hello";

p[0] = 'a';

 VC6.0下,编译无错,但运行是提示内存不可写,这就是因为"Hello"存放在Text段,它是只读的,你不能去修改它.


Data段: 已经初始化了的全局变量string就存放在该段,Data段用来存放初始化了的变量,即初始化了的全局变量和静态变量

 

BSS段: 未初始化的全局变量iSize存放在这,BSS段主要存放在未初始化的变量,即未初始化的全局变量和静态变量

 

Heap段: 程序员手动分配的malloc(iSize)这篇内存存放在该段,也需要用户自行释放

 

Stack段:函数里的局部变量*p存放在该段,Stack段主要存放局部变量、临时变量、函数相互调用的返回的地址,该段由编译器自行分配和释放

 

那接下来我们来看看,它们什么被分配了内存,什么时候释放内存:


全局变量和静态变量:程序开始的时候就分配了,程序结束时候释放内存。

局部变量:函数调用的时候为变量分配内存,调用结束释放内存。

堆里的:调用malloc时分配内存,调用free时释放。


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值