从两方面来考虑:

分配和释放,堆在分配和释放时都要调用函数(malloc,free),比如分配时会到堆空间去寻找足够大小 的空间(因为多次分配释放后会造成内存碎片),这些都会花费一定的时间,具体可以看看malloc和 free的源代码,函数做了很多额外的工作,而栈却不需要这些。

访问时间,访问堆的一个具体单元,需要两次访问内存,第一次得取得指针,第二次才是真正的数 据,而栈只需访问一次。另外,堆的内容被操作系统交换到外存的概率比栈大,栈一般是不会被交换 出去的。