c++内存管理和虚拟内存页面大小
C++ Memory Management and Virtual memory Page size
谁能解释一下c++ new和Virtual memory page size之间的关系?操作系统将物理内存划分为页(通常为4K),并将其映射到虚拟内存中。我想了解c++的new/delete如何影响页面的分配。
谢谢长子
冒着过度简化的风险:
页面大小和new之间没有真正的关系。大多数c++实现在new.
中调用malloc()来实际分配内存。大多数malloc实现管理堆内存池。当调用malloc发出当前内存池无法满足的请求时,malloc调用操作系统服务来扩大内存池。
此步骤通常通过请求操作系统将其他页面映射到进程虚拟地址空间来执行。
因此,malloc池的大小将是页面大小的增量。但是,malloc/new通常会忽略页面边界。
Delete/free倾向于简单地将内存返回到malloc池。删除的内存页不会作为页被释放。
一个新的/malloc实现可以用许多不同的方式分配内存。有些以固定大小分配内存(通常会产生多余的内存)。
相关文章:
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- C++继承的虚拟类的内存布局
- 了解 Linux 虚拟内存:valgrind 的 massif 输出显示了有和没有 --pages-as-heap 的主要差异
- X 处的指令引用了 Y 处的内存.内存无法读取
- 为什么我只能在 4 GB 的虚拟内存空间上分配 2 GB?
- AWS pandas 安装出现错误:虚拟内存已耗尽:无法分配内存
- C++非虚拟类成员变量内存布局?
- 为什么缺少虚拟析构函数不会导致内存泄漏?
- 不同类的虚拟函数共享相同的(无效?)内存地址
- 如何判断虚拟内存页是否已锁定
- 如何使用一个 VirtualFree 调用删除多个相邻的虚拟内存分配?
- C++ 清除动态阵列中的内存 - 内存无法清除
- Windows 32 位 mfc 应用程序的虚拟内存中的地址
- 如何将x64机器代码写入虚拟内存并在C++中为Windows执行
- 读取虚拟内存时C++缓冲区溢出
- 在 Linux C++ 中获取虚拟内存最大映射计数
- 虚拟方法内存使用Java与C++
- 虚拟表内存位置
- 低内存内存管理:查找和跟踪随机函数返回值的重复项
- c++纯虚拟方法内存管理问题