我正在读一本关于C#(Pro C#和Andrew Troelsen的.NET 4平台)的书,我刚读过这段话:
如果要构建将部署到低内存设备(例如支持.NET的手机或PDA)并且需要尽可能节省内存的.NET应用程序,则更改枚举的基础类型会很有帮助.
字节使用更少的内存是真的吗?出于性能原因,它们不是存储在4个字节上吗?我记得在某个地方读过后者,但我找不到任何关于它的信息,甚至在C#规范中都没有.
这并不简单.作为方法中的变量,它们几乎相同int,所以4字节; 在数组内部,它们是单字节的.作为一个领域...我需要检查; 我猜填充意味着它们可以被视为4字节.一个struct有sizeof应披露...
struct Foo {
byte a, b, c;
}
static class Program {
unsafe static void Main() {
int i = sizeof(Foo); // <==== i=3
}
}
Run Code Online (Sandbox Code Playgroud)
这里i显示3,因此它们是单字节作为字段,但是(参见codymanix的注释)当涉及其他类型时可能需要额外的填充 - 例如:
struct Foo
{
byte a, b, c;
int d;
}
Run Code Online (Sandbox Code Playgroud)
由于需要对齐,因此是8个字节d.有趣的乐趣.