标签:内存管理 移植 成员变量 类型 简单 分配 语言 段式内存管理 ++
动态内存分配
代码存放在代码区,数据则根据类型的不同存放在不同的区域中。
BSS段存放没有初始化或者初始化为0的全局变量。大多数os加载程序时会把BSS全局变量清0;为了保证移植性,最好把变量初始化为0。
在C语言程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中
例子: int g_bss_array[1024 * 1024]; 和 int g_bss_array[1024 * 1024] = {1};
bss.c gcc命令编译生成的可执行文件大小:初始化为1时 4.1M; 程序运行周期bss一直存在。
data段 :用于存放在编译阶段(而非运行时)就能确定的数据,可读可写。也是通常所说的静态存储区,赋了初值的全局变量、常量和静态变量都存放在这个域。
全局的未初始化变量存在于bss段中,具体体现为一个占位符,全局的已初始化变量存于data段中,而函数内的自动变量都在栈上分配空间。
bss段(未手动初始化的数据)并不给该段的数据分配空间,只是记录数据所需空间的大小。
data段(已手动初始化的数据)为数据分配空间,数据保存在目标文件中。
data段包含经过初始化的全局变量以及它们的值。
BSS段的大小从可执行文件中得到,然后链接器得到这个大小的内存块,紧跟在数据段后面。当这个内存区进入程序的地址空间后全部清零,包含data和bss段的整个区段此时通常称为数据区。
标签:内存管理 移植 成员变量 类型 简单 分配 语言 段式内存管理 ++
原文地址:https://www.cnblogs.com/starksqi/p/8855119.html