C语言之程序在内存中的分段

  • Post author:
  • Post category:其他


程序在内存中的分段:

当程序开始运行后,会加载到内存中,会把内存分成若干个段。每一段的功能、权限不同。



代码段(code segment/text segment):

程序中的二进制指令存储在此段,

只读权限

。通常是指用来存放程序执行代码的一块内存区域。

只读段:存储常量、字符串字面值。可以把它和代码段合并看成一段。



BSS段(bss segment):

通常是指用来存放程序中

未初始化的全局变量和未初始化静态变量

的一块内存区域。BSS是英文Block Started by Symbol的简称,属于静态内存分配。BBS段在程序执行之前会被系统

自动清零

,所以未初始化的全局变量和静态变量在程序执行之前已经为0。



数据段(data segment):

通常是指用来存放程序中

已初始化的全局变量和已初始化的静态变量

的一块内存区域。数据段属于静态内存分配。

以上三段内存,程序编译完成后大小就确定了,可以使用(size 文件名)查看。



栈:

局部变量(但不包括static声明的变量,static变量存储在DATA或BSS段)、数组,由操作系统管理,自动申请、释放(auto关键字)。



堆:

由程序员手动管理。

在这里插入图片描述



版权声明:本文为Marco___原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。