C语言中内存堆和栈的区别

如题所述

堆(heap)和栈(stack)原本是两种不同的数据结构,在C语言内存表述中,代表着用这两种数据结构管理的两种内存块。
堆由整个系统共享,各个进程拥有同一个堆。 栈由每个进程自行管理,也就是每个进程的栈是独立的,互不相关。
具体区别如下:
一、栈上的内存由系统自动管理分配,用于存储局部变量。 堆中的内存由编程人员主动申请,在C语言中申请内存的函数为malloc, 使用后需要编程人员自行调用free函数释放。
二、从分配释放及访问速度上,栈内存的存取,申请释放速度要高于堆内存。
三、栈内存相对于堆内存要小的多,所以在编程的时候,一般不建议使用占空间过大的局部变量。
四、堆中所有数据均由编程人员申请使用。 栈中除了存放函数中可见的局部变量外,还有各种系统环境数据。
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-11-14
函数体内的自动变量占用栈空间,调用函数时使用栈空间传递参数返回值等信息;使用malloc()类的函数分配的空间占用堆本回答被网友采纳
相似回答