gpt4 book ai didi

objective-c - 使用 Objective-C 以编程方式释放系统内存

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:15 24 4
gpt4 key购买 nike

所以,这就是我想要做的:

  • 以与 purge 命令相同的方式释放系统内存(非事件内存),不过是以编程方式进行的。

我试过这里的代码(它的作者声称它可以工作),但它所做的只是导致 Mac OS X 卡住:

void
free_up_memory()
{
int c;
char *p, *q;

for(c = 0; c < 2048; c++)
{
if(!(p = malloc(1024 * 1024)))
{

return;
}
for(q = p; q < p + (1024 * 1024); q += 4096)
{
*q = 1;
}

}
}

有什么想法吗?

最佳答案

现实情况是,代码并没有——而且永远不会——像它声称的那样。这是垃圾。

它要做的就是破坏系统的缓冲区缓存子系统,并可能使机器快速进行分页,从而导致看起来完全像死锁的症状。尤其是在具有慢速(例如 5,400rpm 笔记本电脑驱动器)硬盘驱动器的系统上。

至少,在 RAM 相对较小的系统上。在具有大量 RAM 和运行的应用程序负载相对较轻的系统上,该程序将驱逐 2GB 的缓冲区缓存,导致各种 I/O 操作变慢,因为各种东西需要从磁盘重新读取,而不是真正帮助任何事情。

也没有必要做任何这样的事情;如果应用程序需要内存,系统将根据需要从缓冲区缓存中逐出页面和/或将内存分页到磁盘(在 OS X 上——在 iOS 上,没有分页器能够在很大程度上写入脏页以保持响应能力)。

调用 purge 将清除各种磁盘缓冲区缓存并模拟冷启动条件,但是——同样——这只会破坏系统的缓存机制,而不会真正提高用户级应用程序的性能.正如手册页文档所述,它对于在 冷缓存 状态下测试应用程序性能非常有用,但即使这样也有点可疑,因为 purge 不会清除所有内容可以被驱逐;不会干净地模拟冷状态。

对于 Steve Jessep 非常有道理的观点,在某些情况下,调用 purge(或类似的)可能会提高性能。这通常 - 几乎普遍 - 在一般情况下会崩溃,因为用户进程 A 无法知道用户进程 B、C、D、....、Z 在附近或附近的任何时候可能会做什么遥远的 future 。例子; A 可能会去清除一些东西,结果 RSS Feed Scraper R 撕下了几 MB 的 XML 进行解析和持久化,立即使清除无效。更糟糕的是,R 的最后一次刷新可能有一些位仍潜伏在缓存中,因此 R 的刷新对 I/O 造成影响,使其速度更慢且成本更高(包括电池生命周期)。

关于objective-c - 使用 Objective-C 以编程方式释放系统内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12277492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com