【问题标题】:Is it true that the smallest memory allocation in .net is a byte?.net 中最小的内存分配是一个字节是真的吗?
【发布时间】:2010-09-26 00:15:18
【问题描述】:

我可以在托管代码中分配的最小内存量是一个字节是真的吗?

我是否正确理解布尔变量占用的内存远不止一点点?

有没有办法让我在 .net 中以小于一个字节的块分配内存?

【问题讨论】:

  • 在汇编程序中甚至不可能。

标签: .net memory


【解决方案1】:

这是正确的,分配是按字节粒度进行的(可能四舍五入到偶数字节甚至更高)。我使用过的任何操作系统都是如此,因此它并不特定于托管代码。内存管理器使用字节,而不是位。

另一方面,如果您有大量布尔值并希望获得更高的存储效率,将布尔值打包成位数组并不难(请参阅BitArray)。

【讨论】:

    【解决方案2】:

    您不能在任何计算机上分配内存(据我所知)小于一个字节,绝对不能在 PC 上。

    此外,使用 .net 不会分配任何内存,除非您在 .Net 中使用 C++(使用垃圾收集,最好说您是“使用”内存而不是“分配”内存,实际上无法判断对 new 的调用是分配内存还是重用内存)。

    如果您使用 C++,即使您可能要求一个字节,操作系统也会分配一块内存供您的程序使用,这几乎肯定会超过一个字节。

    如果您想存储一个位数组,您可以滚动您自己的 BitArray 集合,其中您将存储的最小值是一个字节(实际上您应该使用整数),然后您将这些位打包和解包。

    幸运的是 .Net 3.5 带有 BitArray class显然 1.0、1.1、2.0、3.0 ......感谢 Joe

    但是,总是要付出代价的。打包和解包位将比保存布尔数组慢。

    希望对你有帮助

    【讨论】:

    • > Luckly .Net 3.5 带有一个 BitArray 类。 BitArray 类自 1.0 AFAIK 以来就已经存在。
    【解决方案3】:

    如果您想以节省空间的方式存储大量布尔值,请查看BitArray class

    【讨论】:

      【解决方案4】:

      尝试迁移到Intel 4040。那么你的布尔值将只使用 4 位。但是,如果您在跳蚤市场上找不到,或者碰巧在阁楼上,我会推荐位数组,因为随着 64 位的惊人出现,您的布尔值将变得像双精度数一样大,恐怖!

      【讨论】:

      • 不是(必然)正确的。如果您在 64 位或 32 上运行,分配 bool 数组将占用每个 bool 的字节数。这是一个常见的误解,即一切都必须是 64 位,因为它是 64 位操作系统;它只是意味着你可以根据需要原子地洗牌 64 位。
      • 不是在谈论数组,无论如何我猜你没有看到答案的真正意义......
      猜你喜欢
      • 1970-01-01
      • 2012-12-14
      • 2017-04-30
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      相关资源
      最近更新 更多