C#为什么sizeof不安全以及如何以安全的方式获取结构的大小?

时间:2010-03-10 16:47:18

标签: c#

我已经定义了一个通过socket发送的结构。我想得到它的大小,但sizeof不安全,“System.Runtime.InteropServices.MarshalSizeOf”也是如此。有没有办法以安全的方式获得它的大小?

2 个答案:

答案 0 :(得分:3)

无法为托管结构执行此操作。 Marshal.SizeOf只会返回构成结构的封送类型的数据大小... MIGHT 在某些平台上对托管类型是正确的,但在其他平台上则不正确。

这是设计使得JIT可以根据运行的平台不同地放置结构。

此处有更多信息:Chris Brumme's blog

答案 1 :(得分:0)

请参阅my blog post以获取包装器库,该库允许您确定JIT将定义托管类型的大小(在运行时)。它的工作原理是使用sizeof IL指令,它在C#中根本没有公开。它可以在没有特殊权限的情况下运行,并且可以验证。

注意:这可能是您实际想要的,也可能不是。对于实际上只有一个字节的结构,这可能会返回8。我并不完全理解你的问题,所以我不确定这是不是你想要的。