C++;内存管理和虚拟内存页大小 有人能解释一下C++新页面和虚拟内存页面大小之间的关系。操作系统将物理内存划分为页面(通常为4K),页面映射为虚拟内存。我想理解C++新的/删除如何影响页面的分配。

C++;内存管理和虚拟内存页大小 有人能解释一下C++新页面和虚拟内存页面大小之间的关系。操作系统将物理内存划分为页面(通常为4K),页面映射为虚拟内存。我想理解C++新的/删除如何影响页面的分配。,c++,memory-management,operating-system,C++,Memory Management,Operating System,谢谢 Nayeem冒着过度简化的风险: 页面大小和新页面之间没有真正的关系。大多数C++实现调用MalOC()来在新的./P>内进行实际内存分配。 大多数malloc实现都管理堆内存池。当对malloc的调用发出当前内存池无法满足的请求时,malloc调用操作系统服务以扩大内存池 此步骤通常通过请求操作系统将其他页面映射到进程虚拟地址空间来执行 因此,malloc池大小将是页面大小的增量。但是,malloc/new通常会忽略页面边界 Delete/free倾向于简单地将内存返回到malloc池。

谢谢
Nayeem

冒着过度简化的风险:

页面大小和新页面之间没有真正的关系。大多数C++实现调用MalOC()来在新的./P>内进行实际内存分配。 大多数malloc实现都管理堆内存池。当对malloc的调用发出当前内存池无法满足的请求时,malloc调用操作系统服务以扩大内存池

此步骤通常通过请求操作系统将其他页面映射到进程虚拟地址空间来执行

因此,malloc池大小将是页面大小的增量。但是,malloc/new通常会忽略页面边界

Delete/free倾向于简单地将内存返回到malloc池。删除的内存页不会作为页释放


一个新的/malloc实现可以以多种不同的方式分配内存。有些以固定大小分配内存(通常提供多余的内存)。其他人会根据请求的大小分配内存。

当您着手解决此问题时,
operator new
使用操作系统API请求内存。这只是提出请求的另一种方式。事实上,它是通过一个内置操作符实现的,这并不意味着其他事情正在发生。请参阅。C++/C库必须以某种方式向操作系统请求内存。根据方法的不同,它可能会接收4k粒度的内存(当然,在对其进行检查之前,会从该页提供后续malloc()服务)。请参阅以获取概述。感谢您的回复,现在如果我想优化我的程序,我将不会看到任何更改,直到我的malloc/new将内存释放到操作系统。对于我们的产品,我们做了很多优化,但我们可以看到,与旧版本相比,使用的RAM数量有任何差异。我很难说服我的经理允许我将开发资源用于优化。是否有任何指南/工具可以帮助减少进程的内存足迹?感谢您的回复,现在如果我想优化我的程序,在我的malloc/新版本将内存释放到操作系统之前,我不会看到任何更改。对于我们的产品,我们做了很多优化,但我们可以看到,与旧版本相比,使用的RAM数量有任何差异。我很难说服我的经理允许我将开发资源用于优化。是否有任何指南/工具有助于减少流程的内存足迹?