-
申请方式不同:
-
栈:栈由系统自动分配。
-
堆:堆是程序员申请和释放的
-
申请大小限制不同:
-
栈: 栈顶和栈底是之前预设好的,栈是向栈底扩展,大小固定,可以通过ulimit -a查看,由ulimit -s修改
-
堆:堆向高地址扩展,是不连续的内存区域,大小可以灵活调整。
-
申请效率不同:
-
栈: 栈由系统分配,速度快,不会有碎片。
-
堆: 堆由程序员分配,速度慢,且会有碎片。
总结:
栈就像我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。