1程序构成
程序是由代码段,数据段,BSS段(未初始代数据段),堆,栈组成的
2内存分布
如图
1从低地址到高地址分别是代码段,数据段,BSS段,堆,栈
2堆向高内存地址生长
3栈向低内存地址生长
(还有一点要注意的是所有Linux的应用程序一定是从0x8048000开始的,每个应用程序之间不冲突,因为这是一个虚拟的地址空间,Linux的每一个应用程序都有自己的一套虚拟的内存空间,然后这个虚拟的地址映射到实际的物理地址,映射之后地址不一样)
3数据存放(很重要)
1.代码段:代码,全局常量(const)、字符串常量(char* ch = "dwfefe")
2.数据段:全局变量(初始化以及未初始化的)、静态变量(全局的和局部的、初始化的以及未初始化的)
3.堆:动态分配的区域
4.栈:局部变量(初始化以及未初始化的,但不包含静态变量)、局部只读变量(const)
最后,注意,上面3中的数据段是包含了BSS段的,如果数据段里面的元素没有初始化,就位于BSS段,如果初始化了的,就位于数据段。
程序是由代码段,数据段,BSS段(未初始代数据段),堆,栈组成的
2内存分布
如图
1从低地址到高地址分别是代码段,数据段,BSS段,堆,栈
2堆向高内存地址生长
3栈向低内存地址生长
(还有一点要注意的是所有Linux的应用程序一定是从0x8048000开始的,每个应用程序之间不冲突,因为这是一个虚拟的地址空间,Linux的每一个应用程序都有自己的一套虚拟的内存空间,然后这个虚拟的地址映射到实际的物理地址,映射之后地址不一样)
3数据存放(很重要)
1.代码段:代码,全局常量(const)、字符串常量(char* ch = "dwfefe")
2.数据段:全局变量(初始化以及未初始化的)、静态变量(全局的和局部的、初始化的以及未初始化的)
3.堆:动态分配的区域
4.栈:局部变量(初始化以及未初始化的,但不包含静态变量)、局部只读变量(const)
最后,注意,上面3中的数据段是包含了BSS段的,如果数据段里面的元素没有初始化,就位于BSS段,如果初始化了的,就位于数据段。