编程文汇

为什么栈比堆快

刨根问底

虽然一直都知道栈比堆快,大家的解释也都是栈是系统提供的一种数据结构,比较块。为什么系统提供的就快?很多线程、协程的实现都是自己写的,也有栈,为什么它们也快?

灵光一现

刚才写程序的时候,这个原因突然出现在脑子里,主要原因暂时想到两个:

  1. 栈上分配内存比较快。因为栈空间属于单个线程,从栈上分配变量时,不需要像malloc一样加锁,没有重量级操作。所以,在函数里使用大量临时变量时我们都使用栈变量,这是主要原因。
  2. 缓存友好。CPU会有一级、二级、三级缓存。如果常用的变量都处于连续的存储空间,这样的话,它们就很有可能在同一个缓存块上,这样,可能增加缓存命中率。这部分变量被频繁访问时,效率要比分布在离散空间上要高的多。