小议内存管理的效率——栈与堆的效率分析

栈上的内存是系统自动分配的,压栈和出栈都有相应的指令操作,效率较高,而且分配的内存是连续的,不会产生内存碎片。而堆上的内存需要人为创建,当申请或释放一块内存时,系统需要根据一定的算法在堆空间上寻找合适的内存堆空间,同时修改维护堆空闲空间的链表,然后返回地址给程序,效率比较低,而且容易产生碎片。特别是连续创建和删除占用内存较小的数据或对象时,很容易产生内存碎片。此外,在堆上分配内存容易引起内存缺页,因为当程序执行时,当前栈帧空间所在的内存页肯定在物理内存中,因此程序代码对其中变量的存取不会引起缺页,相反,从堆中生成的对象,只有指向它的指针式在栈上,而对象本身在堆中,堆一般来说不可能都在物理内存中,即使两个相邻生成的对象在堆内存位置上也可能相隔甚远,当访问这两个对象时可能引起两次缺页。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章