我可以在托管代码中分配的最小内存量是一个字节吗?
我是否正确理解布尔变量占用的内存远多于一点?
有没有办法让我在.net中以小于一个字节的块分配内存?
答案 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位的令人难以置信的出现,你的布尔将变得像双打一样大,恐怖!