参考文献:
Linux GUN C 程序观察 —— 罗秋明 清华大学出版社
1、进程的内存布局
2、进程maps信息解读
- 第一列表示被分配使用的地址空间范围;
- 第二列表示该地址区间的访问属性(r w x p),r:表示读, w:表示写, x:表示执行,p:表示私有;
- 第三列给出对应磁盘文件偏移,也就是说一个内存区间可以映射到磁盘文件的一部分,映射的长度等于本段虚存空间长度;
- 第四列表示映射文件的主设备和此设备号;
- 第五列表示该文件的索引节点号;
- 第六列表示文件路径,也就是记录该内存空间和磁盘文件之间的对应关系。
如果内存空间的内容不是来源磁盘的,比如栈所占空间与malloc创建空间的内存区间,则第六列上没有文件路径名,第三、四和五列上均是0;
00010000-00011000 区间是代码段区间, 00020000-00021000 区间是数据段区间;接下来的几段就是共享文件映射区,最后【stack】段表示用户堆栈区。
如果在程序中新增malloc申请内存的操作,看一下/proc/pid/maps如何;
如下,会新增【heap】段,此段就是堆区间;