内存分配中堆和栈的区别

管理方式:

  • 栈由编译器自动管理。
  • 堆由程序员手工管理。

空间大小:

  • 栈一般有1~2M。
  • 32位操作系统堆可以达到4G。

碎片问题:

  • 栈的先进后出的方式导致它不会产生碎片。
  • 堆频繁的malloc/free会产生不连续的空间,造成碎片。

生长方向不同:

  • 栈向下生长。
  • 堆向上生长。

分配效率:

  • 栈由于有就是那几底层支持,效率较高。
  • 堆需要一定算法分配可用内存空间,效率较低。