最近在看PHP源码解析,涉及到堆栈存储区的知识,而我对于这个却不太清楚,因此,看了一下相关资料,总结一下。
栈
栈,存储函数中的局部变量(临时变量),存储函数地址,栈是后进先出的结构,由CPU管理和优化。
使用栈存储变量的优势在于:你不用再管理内存了,不必手动分配内存或释放它,此外,由于CPU相关的优化,读取写入的效率也很高。
关于栈需要注意的一点是:存储在栈上的变量的大小是有限制的,而堆却不是。
堆
堆是计算机内存的一块区域,不会自动为你管理内存,也不是由CPU严格管理的。它是一个更自由的内存区域(并且更大)。要在堆上分配内存,必须使用 malloc 或 calloc,它们是内置的C函数。一旦在堆上分配了内存,你就负责在不需要它时使用 free()释放内存。如果没有做到这一点,程序将会出现所谓的 内存泄漏,也就是说,堆上的内存仍被保留,但其他进程无法使用。
示例
下面这个例子展示了在栈上创建变量的情况:
#include
double multiplyByTwo (double input) {
double twice = input * 2.0;
return twice;
}
int main (int argc, char *argv[])
{
int age = 30;
double salary = 12345.67;
double myList[3]