【问题标题】:Mutable array, Objective-c, or variable array, c. Any difference in performance?可变数组,Objective-c,或可变数组,c。性能上有区别吗?
【发布时间】:2013-07-15 17:41:04
【问题描述】:

我有一个未知大小的多维数组(3D 矩阵),其中该矩阵中的每个元素都是short int 类型。 矩阵的大小可以近似为 10 x 10 x 1,000,000

在我看来,我有两个选择:可变数组(Objective-c)或可变数组(c)。

  1. 对这些数组的读写有什么不同吗?
  2. 当我保存到文件时这些文件会有多大?

我们将不胜感激地接受任何建议。

【问题讨论】:

    标签: objective-c c arrays performance multidimensional-array


    【解决方案1】:
    1. 如果您知道创建时数组的大小,即您不需要动态更改边界,那么具有这些维度的 short int 的 C 数组将很容易获胜 - 原因如下因为没有将值编码为对象和直接索引。

    2. 如果您将数组以二进制形式写入文件,那么它将只是元素数乘以sizeof(short int),而不会产生任何开销。如果您还需要存储 3 * sizeof(int) 的维度 - 12 或 24 字节。

    【讨论】:

    • 所以存储尺寸意味着文件大 12 倍,200MB 与 2400MB?考虑到在读取二进制文件时会(?)重新加载原始 3D 矩阵,我为什么要选择该选项?
    • 抱歉,我显然不清楚。存储尺寸只需要 12 或 24 个字节。内存中的数组,或者作为二进制文件存储在文件中,只是一个长长的值列表;需要维度来确定该长列表中的哪个元素是每个 (x,y,z) 索引的值。除非这些维度是固定的,否则您需要将它们与数组一起存储 - 因此,在元素所需的存储空间中增加了 12 或 24 字节的额外存储空间,并不多!
    • 也许Array Data Structure 中的多维数组部分会更好地解释它。
    • 那么将矩阵保存到结构完整的二进制文件将是 200MB + 24bytes?这是保存矩阵的最节省空间的方法吗?
    • @userjuicer - 排除添加压缩、稀疏矩阵优化等,然后是的。
    【解决方案2】:

    可变数组建立在 C 数组上,因此速度会变慢(尽管速度不会慢很多)。保存此数组时文件有多大?

    它将占用超过 10x10x10000000 个字节,因为您必须以一种可以调用矩阵的方式对其进行编码。这部分真的取决于你。对于 3D 数组,您必须使用特殊字符/格式来表示 3D 数组。这取决于您要如何执行此操作,但是每个数字的每个数字都需要 1 个字节 + 1 个字符用于在同一行中的元素之间放置的空间 +(1 NL 对于数组中的每个第二维 * n) + (3d 值的 1 个其他字符 * n *n)

    将每一行粘贴到自己的文件中可能会更容易,然后像往常一样粘贴其下方的列。然后在一个新文件中,我将开始放置 3d 元素,使每行与第二维的列号对齐。这只是我,这取决于你。

    【讨论】:

    • 如果我在上述情况下将 100 个列表存储为 100 个单独的文件,是否会更节省空间?
    • 您拥有的文件越多,空间就越大。说了这么多,真的不重要吗?不,我们谈论的只是文件头/文件名等的开销。尝试确保文件超过 4096Kb,因为通常如果您的文件小于此大小,操作系统会将文件对齐到 4096K(也就是 2 kb 文件占用 4096kb)。
    • 另外,我假设您将短裤作为字符存储在文本文件中。
    • 将多维短整数数组存储为短字符真的会节省空间吗?
    • 我们已经不是 70 年代了。如果将它们写成文本文件,不仅更容易理解文件,而且不会占用 100 兆或类似的空间。
    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2010-10-25
    • 2017-03-09
    • 2022-07-12
    • 1970-01-01
    相关资源
    最近更新 更多