c程序的存储空间布局

首先要说明的是字节顺序问题。由于历史原因,计算机的数据在内存中的存放方式有两种:

little endian,big endian。intel 的X86系列使用little endian体系,其他基于Risc的mips计算机

使用big endian体系。

little endian 指的是数据的高字节存在内存的高地址上,低位字节存放在内存的低地址上,big endian

和它相反。当编写跨平台和网络程序时应该注意字节顺序。

下面给出一般的c程序存储布局:

用户空间的程序使用低2G的虚拟内存,内核空间使用高2G

高地址    ——0x7FFFFFFF———

                命令行参数和环境变量

                 ——————————

                 栈空间,向下增长

             ___________________

                堆空间,向上增长

            ———————————

                 未初始化的数据

           ———————————

                已初始化的数据

         ———————————

               正文段

低地址—0x00000000————

 

正文段:cpu执行的机器指令部分

初始化数据段:已初始化的全局变量

未初始化数据段:也成为bss段,存放没有初始化的全局变量

栈:自动变量,函数调用的返回地址,调用者环境变量,临时变量。

堆:动态分配的变量。

 

参考文献:

Advanced programming in the UNIX Environment , First Edition  :by W.Richard Steves 

Microsoft Windows Internals ,Fourth Edition :by Mark E. Russinovich, David A. Solomon

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值