私はジョゼフ・アルバハリとベンAlbahari(オライリー)の本クラス変数を宣言する順序は、メモリの割り当て方法に影響しますか?
から抜粋一言でC#6.0、次のように出くわしました。
Copyright 2016 Joseph AlbahariとBen Albahari、978-1-491-92706-9。
経験則として、そして、私はそれがそこに言及表示されていないが、それは従わないだろう - あなたはいつものサイズの降順であなたのタイプの変数を宣言する必要がありこと、順番にメモリの浪費を避けるためにが指摘されていますか?
私はそれが正しいとすれば、私たちはすべて、通常、タイプを設計するときにそれを考慮しなければならないということです。
更新:
私は上記のが正しいか間違っているかどうかを証明するために、次のスニペットを思い付きました。しかし、私はS2のサイズが異なると予想していました(本の説明を支持するため)。
public struct S1
{
public byte b;
public long l;
}
public struct S2
{
public long l;
public byte b;
}
[StructLayout(LayoutKind.Explicit, Size = 9)]
public struct S3
{
[FieldOffset(0)]
public byte b;
[FieldOffset(1)]
public long l;
}
S1 s1 = new S1();
S2 s2 = new S2();
S3 s3 = new S3();
Console.WriteLine(System.Runtime.InteropServices.Marshal.SizeOf(s1)); //prints 16
Console.WriteLine(System.Runtime.InteropServices.Marshal.SizeOf(s2)); //prints 16
Console.WriteLine(System.Runtime.InteropServices.Marshal.SizeOf(s3)); //prints 9
"あなたのタイプでは、サイズの降順で"かなりありません。パッキングの観点から、 'short、short、int、long'は' long、int、short、short'と同じくらい良いです。メモリを削減するためにデータを最適化すると、パフォーマンスに重大な影響が生じることに注意してください。 – AlexD
@AlexD:あなたのビットを追加していただきありがとうございます。メモリを浪費しないように心がけ、上記のガイドラインに従うことで、パフォーマンスに重大な影響がもたらされるかどうかを詳しく説明できますか? – Veverke
私はCPUがワードサイズよりも小さいデータを扱うのを好まないと確信していますので、スペースを節約できるかもしれませんが、パフォーマンスは低下します – MickyD