.net中最小的内存分配是一个字节是真的吗?

时间:2008-12-09 08:21:40

标签: .net memory

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

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

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

4 个答案:

答案 0 :(得分:10)

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

另一方面,如果你有很多布尔值并想要获得更高的存储效率,那么将布尔值打包成一个阵列就不难了(参见BitArray)。

答案 1 :(得分:8)

你不能在我知道的任何计算机上分配内存 - 数量小于一个字节,绝对不在PC上。

另外,使用.net 没有分配任何内存,除非你在.Net中使用C ++,否则所有人都会为你照看(垃圾收集你可能更好地说你是“使用”内存而不是“分配”内存,实际上不可能判断对new的调用是否会分配内存或重用内存。

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

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

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

然而,总是有成本。打包和解包位比保​​持一组布尔值慢。

希望这有帮助

答案 2 :(得分:2)

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

答案 3 :(得分:0)

尝试迁移到Intel 4040。那么你的布尔值只会使用4位。然而,如果你没有在跳蚤市场找到一个,或碰巧在阁楼里找到一个,我会推荐比特阵列,因为64位的令人难以置信的出现,你的布尔将变得像双打一样大,恐怖!

相关问题