lzh电子论坛

欢迎来到lzh电子论坛:
如果您对电子技术感兴趣就加入我们吧!在这里互相交流互相学习!主要讨论的方向有:单片机,ARM,PCB板设计,FPGA,汇编,C/C++等方面。
-----lzh电子论坛
lzhbbs.top-me.com
lzh电子论坛

电子的道路是孤独的,要懂得左手温暖右手,要懂得把debug当作快乐去欣赏,去享受,那样你才会成功...

欢迎访问lzh电子论坛。可通过【谷歌,SOSO,搜狗】搜索“lzh电子论坛”直接进入论坛。点击了解论坛详细制度


    堆,栈,静态存储区

    分享
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 25

    堆,栈,静态存储区

    帖子 由 Admin 于 2013-09-22, 2:19 pm

    网上找的,说的蛮好的
    1.堆:由程序员自己分配释放(用malloc和free,或new和delete) ,如果我们不手动释放,那就要到程序结束才释放。如果对分配的空间在不用的时候不释放而一味的分配,那么可能会引起内存泄漏,其容量取决于虚拟内存,较大。
    2.栈:由编译器自动分配释放,其中存放在主调函数中被调函数的下一句代码、函数参数和局部变量,容量有限,较小。
    3.静态存储区:由在编译时由编译器分配,由系统释放,其中存放的是全局变量、static变量和常量.
    4.区别:
    1)堆是由低地址向高地址扩展,栈是由高地址向低地址扩展。
    2)堆是不连续的空间,栈是连续的空间。
     3)在申请空间后,栈的分配要比堆的快。对于堆,先遍历存放空闲存储地址的链表、修改链表、再进行分配;对于栈,只要剩下的可用空间足够,就可分配到,如果不够,那么就会报告栈溢出。
    4)栈的生命期最短,到函数调用结束时;静态存储区的生命期最长,到程序结束时;堆中的生命期是到被我们手动释放时(如果整个过程中都不手动释放,那就到程序结束时)。


    _________________
    电子的道路是孤独的,要懂得左手温暖右手,要懂得把debug当作快乐去欣赏,去享受,那样你才会成功...
    avatar
    iiimini
    中级会员
    中级会员

    帖子数 : 34
    威望 : 0
    注册日期 : 13-05-30

    回复: 堆,栈,静态存储区

    帖子 由 iiimini 于 2013-09-22, 3:05 pm

    这个~有些不蛮懂,主要是没接触过

      目前的日期/时间是2018-06-18, 11:59 am