关于C语言内存管理分配等若干问题的总结(帮忙看看总结的对不对)
查了些网络资料,总结一下,大家看看我总结的对不对啊???
C程序有5个区域:
stack area(栈区), heap area(堆区), data area(数据区), code area(代码区),文字常量区。
从源代码到可执行程序,需要经过预编译、编译、链接、运行四个阶段。
1:编译阶段:
一个程序经过编译后,就产生了上述5个区域,(对吗?是在编译后就产生5个区域吗?)
如果程序中有全局变量或静态局部变量,则编译阶段会给全局变量或者静态局部变量在数据区分配固定的内存并赋值。
此时,栈区、堆区也已经分配完毕,但是栈区、堆区中没有内容存放(空白的)。
2:程序运行阶段:
程序运行阶段,在函数调用时,会往栈区存放局部变量、函数参数、返回地址等(但是由于栈区是在编译阶段分配的,因此内存的分配属于静态分配)。
在使用malloc()函数时,会向堆区申请内存,使用free()函数时,会释放堆区的内存,因此,堆区的申请和释放由程序员自己控制,
因为堆区的分配和释放由程序员在程序中申请、释放,因此称为动态分配。