一、程序的内存分配
对于一个由C/C++编译的程序,其所占用的内存可以划分为以下几个部分:
- 栈区(stack)—— 由操作系统自动分配和释放,主要用于存放函数参数值,局部变量等。其操作方式类似于数据结构中的栈。
- 堆区(heap)—— 一般由程序员动态分配和释放,若程序员不主动释放,则程序结束后由操作系统回收。注意,它与数据结构中的堆是不同的,分配方式类似于链表。
- BSS段——主要用于存放未初始化的静态变量和全局变量,可读写,它在程序结束后由操作系统进行释放。
- 数据段(data)——主要用于存放已初始化的静态变量和全局变量,可读写,它在程序结束后由操作系统释放。
- 代码段(text)——主要用于保存程序代码,包括CPU执行的机器指令,同时全局常量也是保存在代码段的,如字符串字面值。
二、程序实例
/main.cpp
int a = 0; // 全局初始化区域
char *p1; // 全局未初始化区域
int main(){
int b; // 栈
char s[] = "adoryn"; // 栈
char *p2; // 栈
char *p3 = "zhaobryant"; // 字符串字面量存放在常量区,p3存放在栈上
static int c = 0; // 全局(静态)初始化区域
p1 = (char *)malloc(10);
p2 = (char *)malloc(20); // 分配获得的10和20字