回答
清除不做你仿佛运行认为它的确如此。它不会“释放不活动/使用/有线存储器”。如手册页说:
它不会影响已通过的malloc,vm_allocate分配的匿名内存等
它所做的就是清除磁盘高速缓存。如果您正在运行性能测试,并且想要模拟“冷启动后首次运行”而不实际冷启动的效果,这仅仅是有用的。再次,从手册页:
清除可用于近似初始启动条件与冷磁盘缓冲区缓存进行性能分析。
虽然对符号进行了快速扫描,但似乎是从CoreProfile私有框架调用函数CPOSXPurgeAllDiskBuffers,但没有公开API。我相信底层内核和用户级磁盘缓存代码全部或大部分都在http://www.opensource.apple.com上,所以如果你真的想要,你可以自己实现同样的事情。
正如iMysak所说的,如果你愿意的话,你可以使用exec(或NSTask等)工具。作为一个方面说明,它可以释放使用过的/有线的内存,大概是内存被某些东西使用 - 即使你没有在你自己的数据结构中加入指针,malloc可能也是如此。您是否尝试segfault您的代码?
释放不活动的内存是一个不同的故事。只要将某些内容释放到malloc中,不一定会使malloc将其返回到操作系统。而且你无法强制它。如果您考虑传统UNIX的工作方式,那么它是有道理的:当您要求它分配更多内存时,它会使用sbrk来扩展您的数据段;如果你释放顶部的内存,它可以恢复原状,但如果你释放了中间的内存,那么它就无法做到这一点。当然,现代UNIX系统不能这样工作,但是POSIX和C API都被设计为与那些系统兼容。所以,如果你想确保内存被释放,你必须直接处理内存分配。
执行此操作的最简单和最便捷的方法是创建并mmap临时备份文件或仅MAP_ANON,并在完成后显式取消映射页面。 (这适用于所有的POSIX系统 - 并且使用一个非常简单的包装器,甚至Windows)。如果您需要更多控制(例如,手动处理刷新页面到磁盘等),可以使用mach/mach_vm.h蜜蜂。
您可以直接从OS //使用exec()函数
- 1. 外部空闲内存功能
- 2. 为什么此功能在空闲内存时总是崩溃?
- 3. 成功后,哪些cmd.exe内部命令将ERRORLEVEL清除为0?
- 4. 负空闲内存
- 5. 我是否需要清除在JavaScript中设置为空闲内存?
- 6. remove_if后的空闲内存
- 7. Java - FloatBuffers的空闲内存
- 8. 清除apache-karaf缓存的命令
- 9. 调用命令清除Internet Explorer缓存
- 10. 扩展Symfony 2缓存:清除命令以清除APC
- 11. CloudFlare的“清除”功能如何工作?
- 12. gridview删除命令内updatepanel,和单独的__doPostback()功能
- 13. 元素没有清除功能清除
- 14. 清除Heroku日志(命令)
- 15. 清除命令历史
- 16. 如何清除命令行?
- 17. 表单关闭时的空闲内存
- 18. 函数中的空闲内存
- 19. iphone动画之后的空闲内存
- 20. 为什么别名不能用于清除命令deepIn linux?
- 21. Symfony的缓存清除命令不工作,但没有缓存的方式
- 22. NFS缓存清理命令?
- 23. 清除CLR内存
- 24. WPF你能清除视频内存吗?
- 25. GMSMapView清除不清除内存
- 26. Linux:好友系统空闲内存
- 27. 如何检测PermGen空闲内存
- 28. Apache进程空闲并进食内存
- 29. 在Perl替换命令清空的Windows
- 30. USB清除端点功能
使用exec()系统看起来像冻结 – arachide 2012-07-11 10:46:40
我不确定这个评论意味着什么,但也许你没有意识到exec做什么。 (我假设你用C,ObjC或C++编写,但实际上并没有这么说。)“man 3 exec”会告诉你,它会用你正在尝试的那个替换当前的进程跑。所以,除非你真的想退出并“清除”,否则使用它的方式是在子进程中fork(2),然后执行exec(3)。或者,更简单地说,使用posix_spawn(2)包装器。或者,如果您对可可级别更加熟悉,请使用NSTask。 – abarnert 2012-07-11 19:12:25