linux系统(X86)存储内存布局

参数和环境区:程序执行的时候,命令行参数通过两个入口参数传递给main()函数,第一个参数 int argc表示

命令行参数的个数,第二个 char argv[] ,是一个指向命令行参数的指针数组,每个命令行参数都是以'\0'结尾

的字符串。

栈区:用来存放程序中的动态局部变量(不包括static修饰的局部变量,这类变量存储在数据段);函数参数

按照从右往左的顺序依次入栈,而函数调用结束后,函数的返回值也是存入栈中;因为栈具有先进先出的特点

,所以栈用来作为保存和/恢复调用现场

堆区:堆主要用来存放进程进行过程中动态分配的内存(malloc,calloc,realloc),它的大小并不是固定的;当

使用malloc等函数分配内存的时候,新分配的内存就被动态添加到堆中(堆被扩张);使用free函数释放内存就

是从堆中移除(堆被缩减);在堆中,有一块特殊的区域,叫做MMAP物理内存映射区,用于mmap函数。

bss区(未初始化数据区):bss段包含了程序中没有初始化的全局变量,静态变量(静态局部变量和静态全局变

量),在程序开始运行之前,内核将此段中的数据全部初始化成0或空指针

数据区这块区域用来存放可执行文件中不具有常属性且被初始化的静态变量和全局变量

代码区:这是CPU执行的机器指令的部分,正文段是用来存放可执行文件的操作指令,还有一些字面值常量和具有

常属性的静态变量和全局变量,它是可执行程序在内存中的映像。

 

存储区与存储数据类型的整理

存储区数据类型
代码区①字面值常量②具有常属性且被初始化的静态所有变量和全局变量
数据区不具有常属性且被初始化的静态所有变量和全局变量
bss区所有(不管是否具有常属性)未初始化的静态所有变量和全局变量
栈区动态局部变量(不管是否被初始化,具有常属性)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值