浅析进程地址空间
来源:互联网 发布:淘宝店铺被找回犯法吗 编辑:程序博客网 时间:2024/06/06 18:56
在linux下,当我们对我们所写好的程序.c文件进行gcc编译过程时,会出现一个a.out可执行文件,这个文件中到底包含什么呢,接下来我们来看一看。
在UNIX下可使用size命令查看可执行文件的段大小信息。如size a.out。
接下来,我进行测试的演示:
这个是我写好的测试程序。
首先我们来测试这个程序的段大小信息。
我们在这,可以知道,a.out中含有 text(文本段),data(数据段),bss段,
然后,我们对每一个中进行删除操作,观察结果变化。
首先,我删除
int i=15;
得到结果:
所以我们可以得出初始化的全局变量是存放在数据段中的。
然后我们依次对另外三个进行测试。
最后可以得出这一张图:
BSS段:通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。
数据段:通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
代码段:通常是指用来存放程序执行代码的一块内存区域。代码段这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 允许自修改程序。 在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
可执行文件内存布局:
栈:自动变量以及每次函数调用时所需保存的信息都存放在此段中。每次函数调用时,其返回地址、以及调用者的环境信息(例如某些机器寄存器)都存放在栈中。然后,新被调用的函数在栈上为其自动和临时变量分配存储空间。通过以这种方式使用栈,C函数可以递归调用。
堆:通常在堆中进行动态存储分配。一般由程序员分配释放, 若程序员不释放,程序结束时可能由操作系统回收。类似于链表,在内存中的分布不是连续的,它们是不同区域的内存块通过指针链接起来的。一旦某一节点从链中断开,我们要人为的把所断开的节点从内存中释放。
- 浅析进程地址空间
- 浅析Linux计算机进程地址空间与内核装载ELF
- 进程地址空间
- 进程地址空间[1]
- 进程地址空间[2]
- 进程地址空间[3]
- 进程地址空间[4]
- 进程地址空间
- 进程的地址空间
- 进程地址空间
- 进程地址空间
- 8. 进程地址空间
- 进程地址空间
- Linux进程地址空间
- 进程地址空间分布
- Linux进程地址空间
- 进程地址空间
- 进程地址空间
- 【USACO题库】3.2.6 Sweet Butter香甜的黄油
- 湖南集训总结
- 穷举法之韩信点兵
- Usaco-1.4.2-Arithmetic Progressions
- Unity优化总结
- 浅析进程地址空间
- gcc:error trying to exec 'cc1obj':execvp:No such file or directory
- Mercurial(5)
- matlab 保存运行结果 获取load进来的数据 {}符号的意义
- "围观"设计模式(2)--里氏替换原则(LSP,Liskov Substitution Principle)
- leetcode 64. Minimum Path Sum
- 架设DNS服务器
- AnroidStudio2.0开发API17的方法
- HDU-2181-哈密顿绕行世界问题