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

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

对于托管结构,没有办法做到这一点。 Marshal.SizeOf只会返回构成结构的封送类型的数据大小……在某些平台上,托管类型可能是正确的,但在其他平台上则不然。

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

更多信息: Chris Brumme的博客

请参阅我的博客文章,了解一个包装器库,它允许您确定JIT将定义托管类型的大小(在运行时)。 它的工作原理是使用在C#中根本不暴露的sizeof IL指令。 它可以在没有特殊权限的情况下运行,并且可以validation。

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