sizeof()结构未知。 为什么?

为什么我不能在简单结构上使用sizeof()?

例如:

private struct FloatShortPair
{
    public float myFloat;
    public short myShort;
};

int size = sizeof(FloatShortPair);  //CS0233

错误CS0233:'FloatShortPair'没有预定义的大小,因此sizeof只能用于不安全的上下文中(请考虑使用System.Runtime.InteropServices.Marshal.SizeOf)

MSDN指出:

sizeof运算符只能用于编译时常量的类型。 如果您收到此错误,请确保可以在编译时确定标识符的大小。 如果它不能,则使用SizeOf而不是sizeof。

float和short如何编译时间常量? 8 /


shortfloat的大小是不变的 - 但CLR如何决定将这个float放在内存中并不一定是恒定的。 例如,在一个64位的处理器上,它可能会决定将每个值对齐到一个8字节的边界上。

从C#4规范中,第18.5.8节:

对于某些预定义的类型, sizeof运算符产生一个常数值,如下表所示。

[...]

对于所有其他类型, sizeof运算符的结果是实现定义的,并被分类为值,而不是常量。

[...]

出于对齐的目的,在结构的开始处,结构内以及结构的末端可能存在未命名的填充。

请注意,在这种情况下,您可以在unsafe上下文中使用sizeof 。 无论你应该使用该还是Marshal.SizeOf取决于你想要做什么。

链接地址: http://www.djcxy.com/p/72137.html

上一篇: sizeof() structures not known. Why?

下一篇: sizeof a struct member