4
構造体の整列がフィールドタイプがプリミティブであるかユーザー定義であるかに依存するのはなぜですか?
で野田時間 v2では、我々はナノ秒の解像度に移動しています。つまり、関心のある時間の範囲全体を表すのに8バイト整数を使用できなくなったということです。そのため、野田時間の(多くの)構造体のメモリ使用量を調査するようになりました。 CLRの配置の決定におけるわずかな奇妙さを明らかにするため。 まず、これは実装の決定であり、デフォルトの動作はいつでも変更される可能性があることを理解しています。とを使用して変更できることを理解していますが、可能であればそれを必要としないソリューションを考え出します。[StructLayout][FieldOffset] 私の中心的なシナリオはstruct、参照タイプのフィールドと他の2つの値タイプのフィールドを含むaがあり、これらのフィールドがint。。私はそれが64ビットCLRで16バイトとして表されることを期待していましたが(参照用に8バイト、他のそれぞれに4バイト)、何らかの理由で24バイトを使用しています。ちなみに私は配列を使用してスペースを測定しています-レイアウトは状況によって異なる場合があることは理解していますが、これは妥当な出発点のように感じました。 これは問題を示すサンプルプログラムです: using System; using System.Runtime.InteropServices; #pragma warning disable 0169 struct Int32Wrapper { int x; } struct TwoInt32s { int x, y; } struct TwoInt32Wrappers { Int32Wrapper x, y; } struct RefAndTwoInt32s { string text; int x, y; } struct RefAndTwoInt32Wrappers { string text; Int32Wrapper x, …
121
c#
.net
struct
clr
memory-alignment