程序的内部布局
- 下图为在典型的32位Linux操作系统上OS内核和用户模式虚拟内存空间之间可能的划分。
- 详细的划分
上图中从上到下依次为:stack、heap、bss
段,数据段,代码段
-
栈-stack
- 用户存放函数内定义的局部变量,或者和函数调用有关的数据,如返回地址和参数等
-
堆-heap
- 用于动态内存分配。这一内存区由
malloc()
、calloc()
、realloc()
、free()
- 用于动态内存分配。这一内存区由
-
BSS段
- 存放为初始化的静态/全局变量。操作系统会用0填充这个段,因此所有为初始化的变量都会被初始化为0
static int b; //(b = 0)
-
数据段
- 存放由程序员初始化的静态/全局变量
static int a = 1;
-
代码段 -Text/Code segment
- 存放程度的可执行代码。该区域通常为只读
int x = 100; //数据段
int main() {
int a = 2; //栈
static int y; //BSS, 未被初始化的静态变量
int *p = (int *)malloc(2*sizeof(int)); //堆
p[0] = 5;
p[1] = 6;
free(p); //释放堆中的空间,其实没有释放释放的空间小于256K时,不会立即释放,这时用户再次申请内存的话,将获得刚free掉的内存
return 1;
}
复习不玩了…不写了。。。