【问题标题】:Optimum memory management for NSMutableArraysNSMutableArrays 的最佳内存管理
【发布时间】:2013-07-10 01:24:16
【问题描述】:

一个我真正需要回答的快速问题:

哪个占用更多内存?

一个NSMutableArray百万个对象 一百万个NSMutableArrays 有一个对象?

会有区别吗?

【问题讨论】:

    标签: iphone memory-management nsmutablearray


    【解决方案1】:

    一百万个包含一个对象的 NSMutableArray 会消耗更多内存。

    假设一个基本的 NSMutableArray 实现,它有一个指针和一个元素的大小:

    • 指针为 4 到 8 个字节
    • 大小为 4 到 8 个字节
    • 那么每个实例将需要两次分配(一个用于对象,一个用于数组),这意味着这些地址被跟踪到某个地方。
    • isa添加一个指针,另外4到8个字节

    现在这不一定是 NSMutableArray 的实现方式,但它让您了解通用实现中每个实例的内存成本。

    那么您是否愿意将所有这些部分相加:

    • 加1000000 * sizeof(int*)
    • 还是乘以 1000000?

    这应该让您知道 1M 数组将消耗更多内存。当然,如果您需要实数,可以使用 Instruments 进行测试。

    【讨论】:

    • 谢谢。我意识到如何在一个数组中轻松创建 100 万个数组,并进行了一些测试。由于我没有 10 名声望,我无法发布我自己的答案和我使用的代码。无论如何,结果如下:一个数组中的一百万个对象:峰值 = 26.4MB,稳定 = 11MB,时间:2.052 秒。一百万个数组,一个对象:峰值 = 98.2MB,稳定 = 11.6 MB,时间:2.614 秒。我觉得这很有趣。
    【解决方案2】:

    一百万个数组会使用更多的内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2013-10-26
      • 1970-01-01
      • 2011-06-25
      • 2012-03-28
      • 1970-01-01
      • 2016-05-25
      相关资源
      最近更新 更多