小编典典

据我所知,堆栈内存在虚拟内存地址中是连续的,但是堆栈内存在物理上也是连续的?这与堆栈大小限制有关吗?

不,堆栈存储器在物理地址空间中不一定是连续的。它与堆栈大小限制无关。这与操作系统如何管理内存有关。仅当第一次访问相应的虚拟页面(或自从虚拟页面调出到磁盘以来的第一次)时,操作系统才分配物理页面。这称为需求分页,它有助于节省内存使用量。

为什么我们认为堆栈内存总是比堆内存快?如果它在物理上不是连续的,那么堆栈如何利用缓存的更多优势?

它与缓存无关。从堆栈分配和取消分配内存比堆快得多。这是因为从堆栈分配和取消分配仅需要一条指令(递增或递减堆栈指针)。另一方面,从堆分配和/或取消分配内存涉及许多工作。请参阅本文章以了解更多信息。

现在,一旦分配了内存(从堆或堆栈),访问分配的内存区域所花费的时间 就不

取决于它是堆栈还是堆内存。这取决于内存访问行为以及它是否对缓存和内存体系结构友好。

如果我们要对大量数字进行排序,那么使用数组存储数字要比使用列表更好,因为每个列表节点都可以由malloc构造,因此它可能无法充分利用缓存,这就是为什么我说堆栈内存比堆内存快。

使用数组更快,不是因为数组是从堆栈分配的。可以从任何内存(堆栈,堆或任何地方)分配数组。由于数组通常一次可连续访问一个元素,因此速度更快。当访问第一个元素时,包含该元素和其他元素的整个缓存行将从内存中提取到L1缓存中。因此,可以非常有效地访问该缓存行中的其他元素,但是访问缓存行中的第一个元素仍然很慢(除非预先提取了缓存行)。这是关键部分:

由于高速缓存行是64字节对齐的,并且虚拟和物理页面也都是64字节对齐的,因此可以确保任何高速缓存行完全驻留在单个虚拟页和单个物理页中

。这使得获取缓存行效率很高。同样,所有这些都与从堆栈还是堆分配数组无关。无论哪种方式,它都是正确的。

另一方面,由于链接列表的元素通常不连续(甚至不在虚拟地址空间中),因此包含元素的缓存行可能不包含任何其他元素。因此,获取每个元素可能会更昂贵。

2020-06-07

linux系统堆栈内存分配,Linux中堆栈内存在物理上是连续的吗?相关推荐

  1. windows查看linux文件中文,Linux 系统下无法查看Windows 中创建的中文文件名

    标  题: Linux 系统下无法查看Windows 中创建的中文文件名 我是Linux初学者,在网上搜索了很久,经过多次尝试仍然无法解决问题,只好在这里发贴请教了,还望各位高手指点一下. 问题描述: ...

  2. linux系统下安装pfam数据库中hmmer软件以及python3非root用户的安装

    linux系统下安装pfam数据库中hmmer软件以及python3非root用户的安装 http://hmmer.org/从该链接下载源,其中有Userguide.pdf 下载,解压缩并切换目录 之 ...

  3. linux gdb打印内存命令,gdb中查看内存方法总结

    出自计组第三次上机附加题第二题 用gdb运行程序b,输出中相应地址究竟指向了什么? 请贴上你是如何找到的(使用了什么gdb指令等等) 在查看地址前首先需要断点定位到需要查看的位置 显示代码内容 (gd ...

  4. linux系统charp命令,操作系统 Linux系统

    Linux操作系统 预备知识(Operating System): 1.GNU项目,GNU项目是一个自由软件项目,旨在建立一个完全自由开放通用的UNIX软件平台. 2.操作系统:管理计算机硬件和软件资 ...

  5. Linux系统磁状态检测,检测Linux硬件状态

    计算机系统是由软件系统和硬件系统共同组成的.检测硬件状态对于保障整个系统的稳定是非常重要的.不论操作系统是使用Linux.还是Windows,一旦硬件出现故障,那么整个系统的安全就严重了.这里我们主要 ...

  6. linux系统查看串口占用,Linux 系统串口信息查看

    先确认系统启动的时候串口的信息. ECM_5412@chenfl:~$ dmesg | grep tty [ 0.000000] console [tty0] enabled [ 2.511678] ...

  7. 如何制作linux系统硬盘,手把手带你自制Linux系统之二 简易Linux的制作

    手把手带你自制Linux系统之二 简易Linux的制作 本文利用CentOS5.5自带内核制作一个可以正常启动的Mini Linux. 打开上一篇准备工作中创建的CentOS虚拟机,为另一台虚拟机Mi ...

  8. Linux系统-小倒腾之Linux DIY定制裁剪(New kernel+Busybox)o_o(二)

    在前面的<Linux系统-小倒腾之Linux DIY定制裁剪(附带简单网络功能)o_o(一)>博文中,我通过对一个Linux系统的裁剪,最终制作出来了一个带有网络功能的微型Linux系统; ...

  9. linux设置sfq队列参数,Linux系统运维之Linux高级流量控制工具TC使用方法

    Linux系统运维之Linux高级流量控制工具TC使用方法 本文标签: 运维 流量劫持 Linux系统运维之Linux高级流量控制工具TC使用方法, 在做MHA测试的时候,有一个重要的环节就是测试MH ...

  10. linux系统有哪些版本 linux系统哪个版本好用

    l   inux最早由Linus Benedict Torvalds在1991年开始编写.在这之前,RichardStallman创建了Free SoftwareFoundation(FSF)组织以及 ...

最新文章

  1. c语言哈希表电子辞典_关于redis涉及的知识点,C语言如何操作redis
  2. 【SpringBoot】服务器端主动推送SSE技术讲解
  3. 打印图形(2)(直角三角形)(C+Java)
  4. java虚拟机06-内存分区/新生代、老年代
  5. Activity中finish()和onDestroy()的区别
  6. 使用Keras打造一个实时可用交通标志识别App
  7. 质量和品质的区别_质量体系认证,与产品质量认证的区别 !
  8. 《Javascript DOM 编程艺术》
  9. excel绘制直方图
  10. Creo 6.0软件安装教程|兼容WIN10
  11. 字符串:输入与缓冲区问题
  12. 关于计算机ps读后感,ps心得体会4篇
  13. 行政区域村级划分数据库_最新行政区划省市区街道乡镇数据库 每月更新版
  14. neutron使用数据库
  15. ajax poker,《使命召唤15》大逃杀模式介绍 人物解锁方法一览
  16. 怎样设置txt的默认打开方式(比如用nodePad++)
  17. linux键盘控制鼠标软件下载,手机控制电脑软件(Mouse Server)
  18. ssh登录主机报错: Unable to negotiate with 172.222.222.243 port 22: no matching key exchange method found.
  19. 关于地震预测的一个胡思乱想
  20. arduino接收hmi屏幕_求助 连接 Arduino 与威伦通触摸屏

热门文章

  1. MySQL内核月报 2014.11-MySQL· 5.7改进·Recovery改进
  2. EventUtil——跨浏览器的事件对象
  3. tomcat启动时出现Error starting static Resources 错误
  4. Google通过提交表单抓取新页面
  5. idea 出现 GC overhead limit exceed解决
  6. myeclipse 报内存不足的解决方法
  7. spring cloud 学习笔记(1)
  8. ^全^ 获取SQL SERVER2000/2005、MySql、Oracle元数据的SQL语句 [SQL语句来自CodeSmith]
  9. makefile中伪目标的理解
  10. SecurityError: Blocked a frame with origin from accessing a cross-origin frame