一、C语言内存分区
C语言内存分区示意图如下:
1. 栈区
栈区介绍
-
栈区由编译器自动分配释放,由操作系统自动管理,无须手动管理。
-
栈区上的内容只在函数范围内存在,当函数运行结束,这些内容也会自动被销毁。
-
栈区按内存地址由高到低方向生长,其最大大小由编译时确定,速度快,但自由性差,最大空间不大。
-
栈区是先进后出原则,即先进去的被堵在屋里的最里面,后进去的在门口,释放的时候门口的先出去。
存放内容
-
临时创建的局部变量和const定义的局部变量存放在栈区。
-
函数调用和返回时,其入口参数和返回值存放在栈区。
2. 堆区
堆区介绍
-
堆区由程序员分配内存和释放。
-
堆区按内存地址由低到高方向生长,其大小由系统内存/虚拟内存上限决定,速度较慢,但自由性大,可用空间大。
调用函数
-
用malloc等函数实现动态分布内存。
void *malloc(size_t);
-
参数size_t是分配的字节大小。