执行代码时,c/c++编译器会将代码存放到内存四个区域(当然,也可能是其中的两三个)。
首先,内存可以分为四个区域:栈区,堆区,常量区/全局区,代码区。
其次,根据一个例子来分析存放过程。
void main(){
char buf[20]="aaaa";
char buf2[] = "bbbb";
char *p = "cccc";
char *p2 = malloc(100);
strcpy(p2,"dddd");
}
1>程序进入, 先将赋的值传入常量区
2>字符数组需要将常量区的值拷贝到栈区, 并且栈区需要开辟两个4字节的char变量p,p内存放常量区值得内存首地址
3>malloc会在堆区开辟空间,并且会将地址值赋值给栈区指针变量。
4> 最终,strcpy会将dddd,赋值给指针变量p2所指向的堆区空间。