免费mem作为命令'purge'的功能

时间:2012-07-10 14:14:29

标签: macos

我的一个应用程序需要免费非活动/已使用/有线内存的功能,就像命令' purge'一样。 检查和谷歌很多,但不能得到任何打击

欢迎任何评论

2 个答案:

答案 0 :(得分:2)

清除不会像你认为的那样做。它不会“释放非活动/已使用/有线内存”。正如联机帮助页所说:

  

它不会影响通过malloc,vm_allocate等分配的匿名内存。

它只是清除磁盘缓存。这仅在您运行性能测试并且想要模拟“冷启动后首次运行”而不实际冷启动的效果时才有用。再次,从手册页:

  

清除可用于通过冷磁盘缓冲区缓存来近似初始启动条件,以进行性能分析。

没有公共API,尽管快速扫描符号表明它似乎从CoreProfile私有框架调用了一个函数CPOSXPurgeAllDiskBuffers。我相信基础内核和用户区磁盘缓存代码全部或大部分都可以在http://www.opensource.apple.com上使用,所以如果你真的想要,你可以自己实现相同的功能。

正如iMysak所说,如果你愿意,你可以只执行(或NSTask等)工具。

作为旁注,你可以释放使用/有线内存,大概是内存被某些东西使用 - 即使你没有在你自己的数据结构中指向它,malloc可能会这样做。您是否试图对代码进行分段?

释放非活动内存是另一回事。只需将某些内容释放到malloc并不一定会使malloc将其返回给操作系统。并且你无法强迫它。如果您考虑传统UNIX的工作方式,那就有意义了:当您要求它分配更多内存时,它会使用sbrk来扩展您的数据段;如果你在顶部释放内存,它可以退缩,但如果你在中间释放内存,那么它就无法做到。当然,现代UNIX系统不能以这种方式工作,但POSIX和C API都设计为与系统兼容。因此,如果要确保释放内存,则必须直接处理内存分配。

最简单,最便携的方法是创建和映射临时支持文件,或者只是MAP_ANON,并在完成后显式取消映射页面。 (这适用于所有POSIX系统 - 并且使用非常简单的包装器,甚至是Windows。)如果您需要更多控制(例如,手动处理刷新页面到磁盘等),您可以使用mach / mach_vm.h的API。

答案 1 :(得分:0)

您可以使用exec()函数

直接从OS //运行它