使用堆内存为什么比栈内存慢很多很多?申请堆内存需要经过操作系统吗?
如题,做了一个 C 语言小实验,我分别进行了两个操作,
其一是在堆上申请一个长度为一亿的向量,用来储存 double 类型的数据(包含初始化,全部为 0 )
其二是在一个一万次的循环里重复创建长度为一万的数组,类型同样为 double,同样初始化为 0
理论上两者都涉及到 cpu 在内存上填入一亿个 0,但后者的速度比前者要快 30 多倍。这让我想到一个问题,就是传统都认为堆比较慢,而慢产生的原因是什么,堆和栈都是普通内存,理论上应并无硬件层面的区别。难道程序申请堆内存都必须要经过操作系统才导致速度变慢吗?但是感觉又跟传统经验不符,毕竟经过操作系统是一个非常昂贵的操作,总不可能程序内部所有动态特性都要经过操作系统吧。
不过不经过操作系统的话,又为什么会慢这么多呢?