c++ - 分配内存页和页表的算法

标签 c++ c linux algorithm memory-management

我想设计一个算法来分配和释放内存页和页表。什么样的数据结构可以实现最佳性能和最简单的实现?

最佳答案

毫不奇怪,最常见的算法和数据结构称为 page table。 .在最基本的情况下,它由一个将虚拟地址空间 block 映射到物理地址空间 block 的数组组成;未分配的页面设置为空。当进程试图访问未映射的内存时,系统会获取以前未使用的物理内存块并将其映射到页表中。

由于大多数虚拟内存空间对于单级页表来说太大了(具有 4k 页的 32 位机器需要 32 位 *(2^32 字节/4 千字节)= 每个虚拟地址空间 4 兆字节,而 64 bit one 需要成倍增加),使用多级页表:顶层由指向二级页表的指针组成,这些指针指向物理内存的实际区域(可能具有更多级别的间接寻址)。这允许系统在大面积地址空间未使用时节省页表上的内存。

关于c++ - 分配内存页和页表的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2099442/

相关文章:

linux - 将 date bash 命令中的秒数舍入到下限

c++ - 声明一个 String 类型的数组,其中包含带有填充的数字

c++ - 已删除 "general"案例的专用模板函数无法使用 g++ <=4.8.0 和 clang++ 编译

c - 从 C 使用 WinRT?

c++ - 使用 C++ 的 Net-SNMP 变量

Linux - linux 内核模块中的控制流

c++ - 除非存在 libstdc++-6.dll,否则使用命令行命令或通过 VS Code 编译 C++ 程序无法正常运行

c++ - 有选择地禁用已检查的迭代器

c - 参数未传递给 c 内核中的函数

c - ioctl() 用于 C 语言套接字编程