接上文。
这篇文章没有涉及到最根本的原理,只是浅谈。毕竟只是记问之学,没有深入研究过,做此章供大家参考。
上文我们提到了栈和堆存放不同类型的变量,但是有部分问题仍未解决。这篇文章将简说内存分配的其他空间。
代码段:存放代码的空间,这里的代码指的是二进制代码。比如你写了一个hello world的程序,总得有一个地方存放这段程序,而普通c语言代码存放在磁盘中,可是经过编译链接后的代码存放在哪?就是这个代码段中。而代码段中的数据只可读不可写。
BSS(Block Started by Symbol): 用于存放程序中未初始化的全局变量和静态变量的一块内存区域。可读可写。而未初始化的全局变量在编译前会被编译器自动置零。
数据段: 已初始化的全局变量和静态变量存于其中,属于静态内存分配。
所以,上文的变量中:
#include<iostream>
using namespace std;
int a; //未初始化的全局变量,存于BSS
int b = 0; //已初始化的全局变量,存于数据段
int main(){
static int c; //未初始化的静态变量,存于BSS
static int d = 1;//已初始化的静态变量,存于数据段
const int e = 2; //局部const依然存储在栈中
ret