C语言内存模型

C语言内存模型

C语言程序的内存模型分为下面五个,分别为:

  • text segment
  • data segment
  • bss
  • stack
  • heap

text segment(代码段)

text segment简称为文本段,又叫代码段(code segment),存放指令的地方,这一部分内存区域是可读(read - only)的,因为一个程序在被写好之后,其执行逻辑也是相同的。所以一般程序被加载到内存中来,其代码段有且仅被加载一次。无法改变

data segment(数据段)

data segment又称为数据段,用于存放初始化了的全局变量和静态变量。又可细分为read only data segmentread - write data segment,前者是用于存放常量的地方,后者是用于存放变量的地方

bss(未初始化数据段)

bss存放未初始化全局变量和静态变量,一般未初始化的静态变量会被机器自动初始化为一个特定值,比如说0,它的值是可以在运行时被改变的

stack(堆栈空间)

堆栈空间与堆空间与动态分配的空间有关,在X86架构上,堆栈起始位置位于bss段下面,而堆指针位于最下方,两者相对者运行,并且以堆栈指针大于堆指针作为overflow的标志,堆栈有先进先出的特征,用于存放在函数调用时保存进程的上下文,并且有一种叫stack frame(栈帧)的名词,用于存放传入的参数和返回地址,一个栈帧至少包含一个返回地址,因为栈帧的存在和上下文的保护,使得函数调用中其内部的操作不会影响到其它的数据,并且一些局部变量也会是存放在堆栈里面

heap(堆空间)

堆空间与内存分配有关,与calloc, readloc,free等有关,用于申请动态变量,一些共享库也会使用到这部分的空间

Case

int global_var1 = 10;  // Data Segment
int global_var2;	   // Bss

int main(){
    static int var1 = 20; // Data Segment
    static int var2;      // Bss
   	return 0;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值