25得票6回答
为什么 LayoutKind.Sequential 在结构体包含 DateTime 字段时会有不同的表现?

如果一个结构体包含 DateTime 字段,为什么 LayoutKind.Sequential 的工作方式会有所不同? 考虑以下代码(必须启用“不安全”编译的控制台应用程序): using System; using System.Runtime.InteropServices; nam...

22得票2回答
C/C++中嵌套结构体中的尾部填充 - 是否必要?

这更多是一个理论性问题。 我熟悉填充和尾部填充的工作原理。 struct myStruct{ uint32_t x; char* p; char c; }; // myStruct layout will compile to // x: ...

16得票1回答
为什么 System.DateTime 结构体具有 Auto 布局类型?

结构体System.DateTime及其同类System.DateTimeOffset的结构布局类型设置为“Auto”,可以通过以下方式查看:typeof(DateTime).IsAutoLayout /* true */ 或:typeof(DateTime).StructLayoutA...

13得票1回答
结构体中存在LayoutKind.Explicit时,必须遵循LayoutKind.Sequential。

运行以下代码时:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace Stru...

11得票2回答
C# StructLayout.Explicit问题

我正在试图理解为什么第一个示例会给我以下异常,而第二个示例却没有任何问题。根据描述,两个示例都应该产生异常。有谁能给我指点一下吗? 未处理的异常: System.TypeLoadException: 无法从程序集'StructTest,Version=1.0.0.0, Culture=...

8得票1回答
C#10的只读记录结构体是否保证了与显式实现相同的字段大小和对齐方式?

我的工作需要使用连续数据。现在随着C# 10的推出,我们可以使用public readonly record struct。 我喜欢记录具有自动ToString功能等特性,因此为我完成这项工作很好。 因此,以下两种方式是否等价? [StructLayout(LayoutKind.Sequen...

7得票1回答
为什么 C# 可以在运行时处理这种明显愚蠢的对象提升?

我非常喜欢C#语言。我只是在玩耍,永远不会在生产代码中使用下面的代码。显然,编译器被结构的布局所愚弄。但是为什么Super类上的字符串仍然可以在运行时被写入和读取呢?我本来预计会有一些内存访问冲突。在运行时检查类型时,它显示为Base类型,请参见NoProblem()函数执行。没有实例化任何S...