内存分区模型
代码区:存放函数体的二进制代码,CPU执行的机器指令。共享,只读
全局区:存放全局变量、静态变量(static) ,程序结束后由操作系统释放
常量区:存放字符串常量、const修饰的全局常量
栈区:编译器自动分配,用来存放函数参数值、局部变量、const修饰的局部常量等
堆区:由程序员申请和释放,若程序员没有释放,则程序结束由操作系统自动回收。C语言中用malloc()和free()实现;C++中用new和delete实现
分区意义:不同区域存放的数据,赋予不同的生命周期,灵活编程
#include<stdio.h>
#include<string.h>
int a = 0; //全局初始化区
char *p1;// 全局未初始化区
int main()
{
int b; //栈
char s[] = "abc";// 栈
char *p2;// 栈
char *p3 = "123456"; //123456\0在常量区,p3在栈上。
static int c =0; //全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);//分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456");// 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
return 0;
}