标准C -- 堆和栈

Posted goul

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标准C -- 堆和栈相关的知识,希望对你有一定的参考价值。

一、堆内存  

  1、就是程序员手动管理的一块内存,在C语言中,可以理解为用malloc、realloc等申请空间的一些函数,这些函数所申请的空间就是堆空间

  2、C语言中,堆空间是申请和释放 malloc/free 这两个函数来实现

  3、堆内存和物理空间的大小有关,如果物理空间够大的话,理论上,程序员可以申请足够大的内存

  4、无法和标志符建立连接,因此堆内存的申请一定需要用到指针来接受函数申请到后返回的内存地址

      例如:int* p = malloc(sizeof(int));此函数就申请了4个字节的内存空间

 

二、栈内存

  1、栈内存是系统管理的一块内存,他的内存大小有限,不过一般程序员正常使用时,都是足够大的

  2、栈内存的申请和释放都是系统进行管理的   例如:int  a=0;

  3、栈内存的存储数据的特点是先进后出原则

  4、栈内存的使用一般是在局部函数中,因为局部函数作用域一般比较短,因此栈的生命周期一般较短 

三、总结

  栈内存和堆内存的区别主要围绕:内存的生成和释放,内存空间的大小

    栈内存的优点:栈内存不存在内存管理者的错误,因为他是自动生成和释放的

    栈内存的缺点:栈内存的空间不大,存储数据的时间不长

    堆内存的优点:对内存的数据的保留受程序员控制

    堆内存的缺点:对无用的内存如果没有及时清理,有可能造成内存泄漏

      注:内存申请的速度上,栈内存要快于堆内存

      注:栈内存的生命周期一般较短,因为作用域的缘故

  

以上是关于标准C -- 堆和栈的主要内容,如果未能解决你的问题,请参考以下文章

堆和栈的区别 还有啥建立在堆上 啥建立在栈上

堆和栈的区别

C++堆和栈简析

堆和栈的区别

堆和栈 的区别

C语言堆栈入门——堆和栈的区别