2017-09-01 60 views
1

我有兴趣了解在OSX(https://developer.apple.com/library/content/documentation/Performance/Conceptual/ManagingMemory/Articles/CachingandPurgeableMemory.htmlOSX中的可清除内存是如何实现的?

的可吹扫内存的低级实现

如何内核指示到应用层,它是内存不足,有的吹出的记忆应该是映射的?这是同步的还是异步的(即内核是否只是回收内存,应用程序只在尝试访问该页面时才知道这一点,或者内核请求应用程序释放一定量的内存?)

我来自Linux后台并完全新的OSX/BSD。

回答

0

不只是内核回收内存和应用程序只到达知道这个 当它试图访问该页面

是的,这是基本的。而不是将内存分页到交换文件,可清除的内存页面将被丢弃。请注意,在访问可清除内存之前,应用程序需要将相关页面标记为非易失性。用于此的低级API是Mach VM API:

要分配一个可清除内存块,请将VM_FLAGS_PURGABLE标志传递给vm_allocate()。然后使用控制VM_PURGABLE_SET_STATEvm_purgable_control()函数 - 这会自动设置新的可清除状态,例如, VM_PURGABLE_NONVOLATILE并返回以前的状态(例如,如果内核清除了内存,则返回VM_PURGABLE_EMPTY)。