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

来源:互联网 发布:2016年11月网络热搜 编辑:程序博客网 时间:2024/03/29 07:09

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

四个区域:

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 0
原创粉丝点击