我听到了对此事有不同的看法。
一些人认为,访问在堆上分配的数据(例如
其他人声称,只有在堆上分配数据时比在栈上慢(由于
真相到底是什么?
一些人认为,访问在堆上分配的数据(例如
std::vector
或通过malloc
分配的动态数组)总是比访问在栈上分配的数据稍微慢一些,因为进程必须始终通过中间指针访问该数据,这个指针可能位于完全不同的内存区域;另一方面,他们认为,访问在栈上分配的数据不需要经过这个中间指针,而且这些数据很可能已经被缓存。其他人声称,只有在堆上分配数据时比在栈上慢(由于
malloc
、mmap
和类似函数的开销),但访问不会慢,除非栈和堆位于不同的物理驱动器上。真相到底是什么?