我不打算提高性能或内存使用率,这个问题纯粹是出于好奇。
主要问题
给定以下类,C# 编译器 (Mono + .NET) 会将两个 short
变量打包成 4 个字节还是消耗 8 个字节(对齐)?
public class SomeClass {
short a;
short b;
}
次要问题
如果上述问题的答案不是 4 字节,以下替代方案是否会提供任何优势(其中 SomeClass
被大量使用):
// Warning, my bit math might not be entirely accurate!
public class SomeClass {
private int _ab;
public short a {
get { return _ab & 0x00ff; }
set { _ab |= value & 0x00ff;
}
public short b {
get { return _ab >> 8; }
set { _ab |= value << 8; }
}
}
最佳答案
正如@David_M 所说,这取决于运行时,但您可以使用 [StructLayout]
属性强制执行它,该属性具有一个 Pack
成员,您可以使用它来控制包装。或者,您可以使用 [FieldOffset]
手动布置结构的成员(甚至重叠,这就是您在 .NET 中实现联合的方式)。
关于c# - C#中小数据类型是如何打包的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11140897/