実際、次のデータ型によってどれだけのメモリが消費されているかを知りたいです
整数?= メモリサイズ?
ダブル?= メモリサイズ?
ブール?= メモリサイズ?
ストレージに関する情報やサイズの計算方法を教えてください。
次のコードを使用して、実行時の実際のサイズを取得できます。返される値は、配列の要素の配置と同じになります。これは、CLI のオペコード (ECMA-335 パーティション I、§8.9.1)int?[]
によって返される値と一致します。sizeof
null 許容型は参照型として扱われるsizeof
ため、安全でないコンテキストであっても、C# 演算子をこれに使用することはできません。代わりにTypedReference
、2 要素配列を使用して同じ情報を計算します。
public static int SizeOf<T>()
{
T[] array = new T[2];
TypedReference elem1 = __makeref(array[0]);
TypedReference elem2 = __makeref(array[1]);
unsafe
{
byte* address1 = (byte*)*(IntPtr*)(&elem1);
byte* address2 = (byte*)*(IntPtr*)(&elem2);
return (int)(address2 - address1);
}
}
その後、以下を使用できます。
// This returns 8 on my test, but the runtime is free to change this to
// any value greater than sizeof(int)+sizeof(bool)
int nullableSize = sizeof(int?);
答えはここにあると信じています
基本的に、null 非許容のサイズに bool のサイズを追加します。