为什么Cocoa应用程序使用如此多的内存?

时间:2009-03-28 21:04:12

标签: objective-c cocoa memory

即使是在Xcode中创建新的Cocoa项目时构建的标准空白窗口Cocoa应用程序也使用了近6 MB的内存。这是什么原因?是否可以减少应用程序的使用,或者OS X是否只是为Cocoa应用程序管理内存的方式不同?

不是我在抱怨。我知道性能“几乎不再重要”(编辑:我的意思是,它比可读性/可维护性/程序员的时间更重要)。我只是好奇。

5 个答案:

答案 0 :(得分:9)

OS X在共享内存和写时复制页面方面做了大量工作,因此很可能不会为每个应用程序占用太多的物理RAM。

您可以通过运行来确切地检查内存块的映射方式:

sudo vmmap <PID of the process>

答案 1 :(得分:4)

取决于您使用的所有框架(API)。将其与低级操作完成的VM分配相结合。

唯一值得尝试减少堆alloc(total)以及代码的驻留大小。确保您的数据结构有效分配,并尝试使用着名的“-Os”优化标志(大小优化)进行编译。关于Cocoa吃掉的VM,你无能为力。我真的不担心。

答案 2 :(得分:3)

对于开发人员来说,这显然是一个'WTF'时刻。问题通常是 - 为什么我的琐碎应用程序耗尽了这么多内存。

答案取决于底层框架。你可以说6MB是太多了,但实际上,它什么都没有。

现在看到计算机配备2GB内存并不罕见。 IMAC的股票是4GB。计算机行业的重点是耗尽机器拥有的所有资源,以便它不断发展。

是的,你应尽可能避免使用无效(例如,在启动时不要加载500万点阵列)。但除非你的测试结果证明你捏造了,否则只需将它保存在待办事项列表中即可。

答案 3 :(得分:1)

我在这里有点偏僻,但我想这是因为所有添加的库都需要进行相当多的设置,而且不需要进行垃圾回收,因此它们只会浪费内存;另外,即使所有内存都已自动释放,它也会等到第一个空闲事件,即创建窗口之后。删除不需要的库/框架,或者在从笔尖加载窗口后强制进行垃圾收集,如果您非常担心,可以查看它有多少。

我并不担心。有些内存可能会在以后返回,剩下的就是你为强大的框架付出的代价。

答案 4 :(得分:1)

与cocoa没有直接关联但对框架一般有效的因素是开销不是线性的。就开销而言,通常存在固定的和可变的“价格”来使用框架。

当你创建一个简单的空白窗口时,固定的开销是破碎的,但是当你创建一个包含数十个窗口,对话框,控件和所有窗口的应用程序时,初始的固定开销可以忽略不计,与应用程序本身的大小相反。

相关问题