C语言中内存分配方式有三种:
- 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序运行期间一直存在。例如全局变量,静态变量。
- 从栈上分配。在执行函数时,函数内部变量的存储单元都在栈上分配空间,函数执行结束时自动释放这部分空间。
- 从堆上分配,也叫做动态内存分配。程序在运行时用malloc或new申请任意多的内存,程序员需要手动free或delete释放内存。
程序运行时的内存空间:
- 栈区:由编译器自动分配释放,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
- 堆区:由程序员分配和释放。
- 全局区(静态区):存放全局变量、静态数据、常量。程序结束后由操作系统释放空间。
- 文字常量区:存储常量字符串。
- 程序代码区:存放二进制代码。