有人可以解释一下C ++ new和Virtual memory page size之间的关系。操作系统将物理内存划分为页面(通常为4K),并将其映射到虚拟内存中。我想了解C ++ new / delete如何影响页面的分配。
由于 Nayeem
答案 0 :(得分:1)
存在严重过度简化的风险:
页面大小与新页面之间没有真正的关系。大多数C ++实现调用malloc()来实现新的实际内存分配。
大多数malloc实现管理堆内存池。当对malloc的调用发出当前内存池无法满足的请求时,malloc会调用操作系统服务来扩大池。
此步骤通常通过请求操作系统将其他页面映射到流程虚拟地址空间来执行。
因此,malloc池大小将是页面大小的增量。但是,malloc / new通常会忽略页面边界。
删除/释放往往只是将内存返回到malloc池。删除的内存页面不会被解除分配为页面。
new / malloc实现可以以许多不同的方式分配内存。有些以固定大小分配内存(通常会给出过多的内存)。其他人为所请求的大小分配内存。