天天看点

C/C++函数、变量和指针

动态内存分配是指在程序运行时为程序中的变量分配内存空间,其完全由应用程序自己进行内存的分配和回收。然后内存分配方式并不是唯一的,内存分配方式包括以下3中:

1.从静态存储区域分配内存

程序在编译时就已经把该程序所占用的内存分配好了,并且该内存在整个程序的运行过程中一直是有效的,例如存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统自动释放该内存。

2.在堆栈上分配

在函数执行的这段时间,函数内部的局部变量的存储单元都创建在堆栈上,函数结束时存储单元被自动释放。

在堆栈上分配内存的缺点是堆栈内存分配运算内置于处理器的指令集中,效率高,并且一般不会存在失败的危险。但分配的内存容量有限,可能会发生堆栈溢出的情况。

在堆栈上分配内存的优点是在堆栈中分配内存可以避免或减少内存碎片的产生。

3.动态内存分配

动态数据区一般就是“堆”和“栈”,并且“堆”和“栈”是两种不同的动态数据区。

栈(stack)是一种线性结构。由编译器自动分配释放。栈是用来存放函数的参数值、局部变量、本地变量的值等。其操作方式类似于数据结构中的栈。

堆(heap)是一种链式结构。一般由程序员分配释放,否则会造成内存泄露。注意它与数据结构中的堆是两个完全不同的概念。

以上是内存的分配方式。

c/c++通常可以把内存理解成4个分区:栈、堆、全局/静态存储区以及常量存储区。

继续阅读