为什么使用小于32位的整数?

时间:2009-10-25 21:11:19

标签: c# memory compiler-construction memory-management

我总是喜欢使用尺寸最小的变量才能正常工作,但是如果我使用短字节整数而不是整数,并且内存是32位字可寻址的话,这真的会让我获益吗增强内存使用率?

5 个答案:

答案 0 :(得分:11)

对于局部变量,它可能没那么多意义,但是在你有数千甚至数百万项的结构中使用较小的整数,可以节省大量的内存。

答案 1 :(得分:4)

不,int被选为现代32/64位体系结构中最快的int类型,使用较短的(shortsbyte)类型只会降低性能。

有时可以节省内存,但仅限于使用大型数组或列表时。即便如此,它通常也不付钱。

用8位计算:

sbyte a, b, c;
a = (sbyte) (b + c);

类型转换是必需的并且带有运行时成本。

答案 2 :(得分:3)

如果它是一个普通变量,使用较短的宽度不会获得任何结果,并且某些性能可能会丢失。编译器会自动将存储扩展为完整的处理器字,因此即使您只声明16位,堆栈上可能需要32位。此外,编译器可能需要在某些情况下执行某些截断操作(例如,当字段是结构的一部分时);这些可能会导致轻微的开销。

它真的只对结构和数组有用,即如果你有很多值。对于结构体,您可以节省一些内存,但代价是我上面提到的开销。另外,如果结构需要遵循一些外部布局,则可能会被迫使用较小的尺寸。对于阵列,如果阵列很大,则可以节省内存。

答案 3 :(得分:3)

通常,坚持int等。

除了其他答案;在某些情况下,您有意只想支持给定的数据大小,因为它代表了数据的一些关键事实。这可能是与外部系统(特别是互操作,但也包括数据库,文件格式等)交谈时的关键,并且可能与checked算术混合在一起 - 尽可能早地发现溢出。

答案 4 :(得分:2)

老实说,内存消耗可能不是使用小注入的最有说服力的理由(在本例中)。但是有一个普遍的原则是肯定的,你应该只使用数据结构所需的内存。

原则是这样,只分配数据所需的宽度,让编译器找到可能发生的任何溢出错误,这是一种非常有效的附加调试技术。如果知道某个值永远不会超过阈值,那么只能分配到该阈值。