本文共 982 字,大约阅读时间需要 3 分钟。
1、Text(代码区):二进制,只读2、Bss(静态区or全局区): 未初始化或初始化为0的全局变量、静态变量,具体体现为一个占位符,并不给该段的数据分配空间,只是记录数据所需空间的大小3、Data(数据段/静态存储区):存放初始化(普通+静态)全局变量和(全局 + 局部)静态变量 因为字符串常量很少需要修改,放在静态内存区会提高效率 //BSS由数据段衍生出去4、Stack:局部变量5、Heap:new/delete和malloc/free 其中Stack和Heap的内存增长方向是相反的进程的虚拟地址空间图示如下:
又称为文本段。存储可执行文件的指令;也有可能包含一些只读的常数变量,例如字符串常量等。
存放只读数据,比如printf语句中的格式字符串和开关语句的跳转表。也就是你所说的常量区。例如,全局作用域中的 const int ival = 10,ival存放在.rodata段;再如,函数局部作用域中的printf(“Hello world %d\n”, c);语句中的格式字符串"Hello world %d\n",也存放在.rodata段。
但是注意并不是所有的常量都是放在常量数据段的,其特殊情况如下: 1)有些立即数与指令编译在一起直接放在代码段。 2)对于字符串常量,编译器会去掉重复的常量,让程序的每个字符串常量只有一份。在进程被载入内存中时,基本上被分裂成许多小的节(section)。我们比较关注的是6个主要的节:
(1) .text 节 (2).data 节 (3).bss 节 (4) 堆节 (5) 栈节 (6)环境/参数节 环境/参数节(environment/arguments section)用来存储系统环境变量的一份复制文件, 进程在运行时可能需要。例如,运行中的进程,可以通过环境变量来访问路径、shell 名称、主机名等信息。 该节是可写的,因此在格式串(format string)和缓冲区溢出(buffer overflow)攻击中都可以使用该节。 另外,命令行参数也保持在该区域中。转载地址:http://nbhrn.baihongyu.com/