虚拟内存管理
程序员文章站
2024-03-24 14:17:40
...
定义
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
我的理解
进程实例在用户态并不直接操作物理内存地址,实际物理内存是可能是零散的,用户管理起来绝对要疯,所以,用户可见的实际上是一段连续的虚拟地址空间。
并且,虚拟内存遵循用到时才申请的原则,不会说你开辟了G级空间,就需要分配G级物理内存。
int main()
{
char* test = (char*)malloc((unsigned long long)64*1024*1024*1024) ;
test[0] = '1';
cout<<test[0]<<endl;
return 0;
}
可以看到实际使用的物理内存才1092个字节
虚拟内存段式管理
下图是进程实例中各段内存布局。
这张图其实还少了一部分,就是地址随机化
配置在 /proc/sys/kernel/randomize_va_space
0:不开启ASLR
1:运行栈和共享库以及部分堆的随机化
2:在1的基础上包括所有堆的随机化
开启klaslr后,.text/.rodata/.init/.data/.bss这些段相对于基地址都加上了一个offset
虚拟内存页式管理
一般一页4K,由内存管理部件MMU负责统一管理。
有几点需要注意
1 进程开辟的虚拟内存并不全部加载进来,就像课本一样,用到哪一页就加载哪一页。
2 当发现需要用到的页不在内存时,会触发缺页中断,执行加载
3 当发现物理内存不够用时,会触发页面置换,通过一些算法,淘汰一个页进入swap,然后加载需要的页。
可参考:https://blog.csdn.net/weixin_44682507/article/details/103587653
上一篇: 关于函数堆栈的问题请教...
推荐阅读
-
60. Linux 磁盘管理 - 概念
-
虚拟内存管理
-
Android的优化BaseActivity统一管理Activity
-
Win10 RS3版 删除资源管理器中的“3D 对象”
-
如何删除Win10文件管理器中的3D对象/音乐/视频/下载/文档等文件夹
-
IIS5.1+PHP5.1.4+Mysql5.0+PHPmyadmin2.8.2配置 博客分类: 杂 配置管理PHPEXTC++C
-
成为Java程序员Day10:快递管理系统
-
【13】进大厂必须掌握的面试题-配置管理面试
-
maven工程生成javadoc api 博客分类: 项目管理
-
maven工程生成javadoc api 博客分类: 项目管理