程序在内存中占的四个区域

首先,任何一个程序在执行的时候都会把其代码、变量等储存在一个地方。也就是说在内存中分四个区域来存储。

四个区域:

1.代码区;

2.全局栈区;

3.堆;

4.局部栈。

同个一个小例子可以简单看一下:

我们利用linux来写一段代码,


图片

printf("%d\n",getpid());

while(1);

}

编译,生成一个可执行文件,然后可以看到一个pid号码.while(1)的意思是让程序一直运行下去,因为如果程序停止,进程就不存在了,pid号也不存在,并且没法看其内存分布了。运行程序,然后重新打开一个终端窗口,进入/proc目录,然后进入对应的pid号的文件夹下。文件夹下有很多东西,其中cwd是工作路径,exe指向执行程序,fd,cpuset是程序用cpu的信息,maps是所有的内存结构,对就看一下maps。
  

然后可以看到内存结构,main(程序名字)那个空间中权限里带x的就是代码区了,可以看到,main函数和add函数都在这里面;stack这个空间就是局部栈了,存储函数中的一些变量;而可以看到存储全局变量的那块空间是全局栈,全局栈一般都有w权限;而malloc对应的就是堆了。

所以,a1,a2在全局区,a3在代码区,b1在栈中,b2在全局区,b3在局部站区,p1在堆中,main在代码区,add在代码区。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值