字节变量如何存储在内存中?

neo*_*862 6 c# memory byte

我正在读一本关于C#(Pro C#和Andrew Troelsen的.NET 4平台)的书,我刚读过这段话:

如果要构建将部署到低内存设备(例如支持.NET的手机或PDA)并且需要尽可能节省内存的.NET应用程序,则更改枚举的基础类型会很有帮助.

字节使用更少的内存是真的吗?出于性能原因,它们不是存储在4个字节上吗?我记得在某个地方读过后者,但我找不到任何关于它的信息,甚至在C#规范中都没有.

Mar*_*ell 7

这并不简单.作为方法中的变量,它们几乎相同int,所以4字节; 在数组内部,它们是单字节的.作为一个领域...我需要检查; 填充意味着它们可以被视为4字节.一个structsizeof应披露...

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.有趣的乐趣.

  • 但是如果你有struct Foo {byte a; int b; }.由于b是int,因此需要对齐,因此会插入额外的填充. (4认同)