在vm_allocate之后释放内存

时间:2015-02-26 12:30:06

标签: ios virtual-memory

我想创建一个大的,连续的,部分驻留的地址空间区域。

我使用vm_allocate在我的iOS应用中分配了一个大区域。 iOS会自动为我找到一个适当大的连续未使用的地址空间区域,并递给我一个指针,这很好。

然后,当我写入时,iOS会自动用物理内存页面对其进行备份,因此我的应用程序的物理内存使用量开始很小并且随着时间的推移会随着需要而增长。到目前为止一切都很好。

偶尔我会停止使用此内存区域的某些部分。我的应用程序跟踪该区域的哪些部分在给定时间实际使用,哪些不是。但是,我似乎无法确定将此信息传递给操作系统的方法,因此我永远无法缩小应用程序的物理内存使用量(例如,响应内存不足警告)。

在其他不太神奇的环境中,此代码库会保留一个连续的地址空间块,然后根据需要手动附加和分离物理页面。

我错过了一些重要的Apple文档吗? - 我是否可以使用类似的API代替vm_allocate来实现此目的;或者,有没有办法可以将vm_allocate d地址空间的页面放回到它们的初始状态"未初始化,自动映射到下一次写入"状态?

1 个答案:

答案 0 :(得分:0)

kern_return_t kr;
unsigned int nbytes = yourMemroySize;
unsigned int address  ; 

vm_deallocate(mach_task_self(),address, nbytes);

我已经使用这段代码释放内存它运行正常。我知道这是非常晚的答案,我希望它会使用一些......