linux内存碎片的概念
一般在内核术语中的“碎片”都是基于物理内存而言的,我没有太看懂你得出碎片是针对地址空间这个结论的逻辑。但我认为,既然你知道了malloc是用户空间调用的,那么你所谓的碎片也是从用户空间的视角而言的,但对于用户空间,看到的只有地址空间,其访问的所有地址都是要经过页表的转换后才访问的物理页面,而且malloc分配的地址空间一定的连续的,那么这个所谓的碎片对于用户空间也就没有任何意义了。不知道你纠结的这个“碎片”在你心目中到底是什么意义,另外,你说的“如果地址空间都不连续就更谈不上物理空间连续”,这个逻辑也是有问题的,地址空间和物理空间没有这种所谓的联系。物理空间连不连续,是内核在管理物理内存的时候要考虑的,跟用户空间完全没有关系,在用户态的视角,只看到地址空间就足够了。
我的意思不是强调虚拟地址的连续性和物理地址连续性的关系,而是说在堆里面,如果不存在一块能够满足用户malloc要求的连续地址,那么malloc就会失败,就更谈不上去获取一块连续的物理内存了。我的观点malloc中的碎片是基于虚拟内存就是基于这一点的。。。
> 如果不存在一块能够满足用户malloc要求的连续地址,那么malloc就会失败,
这句话没问题。
> 就更谈不上去获取一块连续的物理内存了。
这个“就更谈不上”的连词有问题,因为后者跟前者之间没有任何关系,这种表述就有问题了,你的言下之意就是:如果malloc成功了,那么,就可能谈得上去获取一块连续的物理内存了。这种说法是有问题的,你还是没有理解用户态跟连续物理内存间没有关系的意义。即使用户态分配的连续地址空间,经过缺页异常后获取的物理页面恰好是连续的,这也是没有谈论的意义的,物理地址连不连续对用户空间没有任何影响,也不是用户空间可以左右的。
个人认为没必要把碎片这个词明确界定到是物理地址空间还是虚拟地址空间。提到内存碎片,主要考虑的是两个方面:
1,内存碎片不能有效利用而被直接或间接的浪费。
2,内存碎片破坏了局部性原理,导致性能的降低。
这些应该都是针对物理内存来说的。很少有说因为“地址空间碎片”不够导致内存申请失败,相比地址空间,物理内存更紧缺,提到内存碎片当然是指物理内存。
linux内存碎片的概念的更多相关文章
- Linux负载均衡概念与实践(一)
根据网上文章整理. 负载均衡软件LVS(Linux Virtual Server)概念篇 lvs是在linux操作系统基础上建立虚拟服务器,实现服务节点之间的负载均衡.它是基于linux内核实现的.2 ...
- Linux(二)—— Unix&Linux 的基本概念
Linux(二)-- Unix&Linux 的基本概念 计算机 = 主机(host)+ 终端(terminal) 主机 = 内核 + 实用工具 内核(kernel) 当计算机启动时,计算机要经 ...
- linux信号基本概念及如何产生信号
linux信号基本概念及如何产生信号 摘自:https://blog.csdn.net/summy_j/article/details/73199069 2017年06月14日 09:34:21 阅读 ...
- Linux的防火墙概念
#linux的防火墙概念#因为如果你不关防火墙,很可能运行 django.nginx.mysql出错#防火墙可能会阻挡端口流量的 出口#也会阻挡外来请求的 入口 #selinux iptables f ...
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...
- linux 时间管理——概念、注意点(一)【转】
转自:http://www.cnblogs.com/openix/p/3324243.html 参考:1.http://bbs.eyeler.com/thread-69-1-1.html ...
- linux缓冲的概念fopen /open,read/write和fread/fwrite区别
fopen /open区别 UNIX环境下的C 对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write这里简单的介绍一下他们的区别.1 ...
- 关于linux 内存碎片指数
linux针对每一个node的每个zone的每个order,都有一个碎片指数来描述当前的碎片程度,也就是 extfrag_index 参数: extfrag_index这个要展示出来,需要内核编译了两 ...
- linux:进程概念
Linux进程概念 一.实验介绍1.1 实验内容Linux 中也难免遇到某个程序无响应的情况,可以通过一些命令来帮助我们让系统能够更流畅的运行. 而在此之前,我们需要对进程的基础知识有一定的了解,才能 ...
随机推荐
- 布隆过滤器(Bloom Filter)简要介绍
一种节省空间的概率数据结构 布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某个对象是否存在时,它可能会误判.但是布隆过滤器也不是特别不精确,只要参数设置的 ...
- Windows平台下Android应用抓包挖掘漏洞方法
0x01 大体思路 在安卓75%的市场占有率下,形形色色的安卓应用层出不穷,随之而来的便是大波的漏洞.在各类市场中随意翻一下,几乎都是连接网络的应用,这在给用户惬意体验的同时也给我们漏洞挖掘带来了机会 ...
- zeromq 笔记
一. 当执行zmq_bind后会进入mute state,直到有进入或者出去的连接发生才会进入ready state 在mute state状态下会根据不同的套接字类型决定是丢弃消息还是阻塞 可参考z ...
- JS实现快速排序算法
以下贴出两种实现方式,结果一样,但有些许的差别: 第一种: <script type="text/javascript"> var arr=[6,7,8,3,4,5,9 ...
- eclipse git 解决冲突
1,team->synchronize workspace 2, merge tool 合并本地版本 3,add to git index 4,commit 5,push
- 劳动节前得空半天-总结一下最近使用的LINUX命令
一.搜索文件 1.locate xxx.log 全盘搜索xxx.log文件 2.which java 查找命令 3.ll xxx.log 在目录下查找文件 二.搜索内 ...
- C/C++读取一行
C语言 1. char buf[80]={0}; gets(buf); //可以读取空格, 回车结束输入 2. char buf[10] = {0}; scanf("%[^\n] ...
- pop链构造
class Person { private $name; private $sex; private $age; //__set()方法用来设置私有属性 function __set($proper ...
- Nginx之动静分离
为什么要动静分离呢? 拿Nginx来说,Nginx是Web服务器,仅仅只能处理静态资源(例如js,img,css等等),而Tomcat属于应用服务器既能处理静态资源又能处理动态资源(例如jsp,fre ...
- Django实战(二)之模板语言
该实战教程基于菜鸟教程,菜鸟教程可参考:http://www.runoob.com/django/django-template.html 模板语法,每个框架都有其支持的模板语法,Django的模板语 ...