面试常问存储分区,尽管日常用处不大,这里整理一下,参考书籍UNIX高级编程。
进程存储空间分布:分段(Linux虚拟内存)
||{文本区 全局区[初始化的数据段 未初始化数据段(BBS段)] 栈区(stack) 堆区(heap) 常量区}||
文本区:代码段 不包括变量 数据共享供多进程使用
初始化的数据段:全局变量和静态变量 (初始化的) **非0值** 程序结束自动释放
未初始化数据段:全局变量和静态变量 (未初始化的) 0初始化 程序结束自动释放
栈区:动态增长与收缩的段 局部变量(自动变量) 函数参数与返回值 函数退出自动释放
堆区:动态分配的内存段 手动释放
常量区:字符串常量
#include<stdio.h>//代码区
#include<string.h>//代码区
#include<malloc.h>//代码区
#include<stdlib.h>//代码区
#define N 5 //代码区
struct cc{int A ; char AA;}; //代码区
int add(int ,int ); //代码区
static int a;static int aa=0;//全局区.静态全局变量.未初始化的数据段 0常量区
static