私はパフォーマンスやメモリ使用量を改善することを検討していませんが、この質問は純粋に好奇心から始まりました。 C#コンパイラは、(モノ+ .NET)4バイトに2つのshort
変数をパックするか、彼らは(アライメントで)8つのバイトを消費します次のクラスを考えると小さなデータ型はどのようにC#でパックされます
主な質問 ?
public class SomeClass {
short a;
short b;
}
セカンダリ質問 に上記の質問に対する答えは4バイトでなかった場合は、次の代替オファーは(SomeClass
が非常に大量に使用されている)すべての利点になります。
// Warning, my bit math might not be entirely accurate!
public class SomeClass {
private int _ab;
public short a {
get { return _ab & 0x00ff; }
set { _ab |= value & 0x00ff;
}
public short b {
get { return _ab >> 8; }
set { _ab |= value << 8; }
}
}
C#コンパイラはこれと関係がありません。ランタイムになります。 –
「非常に大量に使用されています」と言えば、何回話していますか?どのように使用されていますか?これらの配列/リスト/ etcを作っていますか? –
@ReedCopseyはい、このコンテキストの理論は、インデックスによる特定のエントリへの頻繁なアクセスを伴う大きなリストになります。 –