MSDN表示GC调用Win32 VirtualAlloc函数来保留内存段并调用Win32 VirtualFree将段释放回操作系统。
这是否意味着每次分配/释放一个段产生页面错误(软或硬 - 取决于内存可用性)。
这是正确的解释吗?
答案 0 :(得分:6)
由VirtualAlloc
分配的块中的各个页面是通过软页面错误提交的。然而,没有理由调用VirtualFree
导致页面错误,因为它只是簿记。
这并不是说GC分配总是会导致页面错误:在没有内存泄漏的情况下,GC会收集垃圾,并重新使用属于该数据库的堆的部分,然后才会从内存中请求更多的内存。 OS。
答案 1 :(得分:1)
当程序访问映射到虚拟地址空间但未加载到物理内存中的页面时,页面错误是硬件引发的软件陷阱
所以简短的答案是否定的。