C#GC。调用VirtualAlloc和VirtualFree Win32函数会导致页面交换吗?

时间:2011-02-21 16:29:37

标签: c# garbage-collection

MSDN表示GC调用Win32 VirtualAlloc函数来保留内存段并调用Win32 VirtualFree将段释放回操作系统。

这是否意味着每次分配/释放一个段产生页面错误(软或硬 - 取决于内存可用性)。

这是正确的解释吗?

2 个答案:

答案 0 :(得分:6)

VirtualAlloc分配的块中的各个页面是通过软页面错误提交的。然而,没有理由调用VirtualFree导致页面错误,因为它只是簿记。

这并不是说GC分配总是会导致页面错误:在没有内存泄漏的情况下,GC会收集垃圾,并重新使用属于该数据库的堆的部分,然后才会从内存中请求更多的内存。 OS。

答案 1 :(得分:1)

当程序访问映射到虚拟地址空间但未加载到物理内存中的页面时,页面错误是硬件引发的软件陷阱

所以简短的答案是否定的。