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

5Yr*_*DBA 6 c#

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

Jcl*_*Jcl 3

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

这是设计使然,因此 JIT 可以根据其运行的平台以不同的方式放置结构。

更多信息请参见:Chris Brumme 的博客

  • 重要的问题是为什么需要知道结构的大小?很可能是出于不安全的原因(在这种情况下您可以使用“sizeof”)或者它是用于 P/Invoke(在这种情况下“Marshal.SizeOf”是正确的答案)。 (3认同)
  • 原因之一:您想要创建一个包含许多结构的数组,并且需要知道 2 GB 可以容纳多少个结构。您需要知道运行时将为该结构分配多少内存。 (2认同)