1

実際、次のデータ型によってどれだけのメモリが消費されているかを知りたいです

整数?= メモリサイズ?

ダブル?= メモリサイズ?

ブール?= メモリサイズ?

ストレージに関する情報やサイズの計算方法を教えてください。

4

3 に答える 3

2

次のコードを使用して、実行時の実際のサイズを取得できます。返される値は、配列の要素の配置と同じになります。これは、CLI のオペコード (ECMA-335 パーティション I、§8.9.1)int?[]によって返される値と一致します。sizeofnull 許容型は参照型として扱われる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?);
于 2013-04-25T14:04:11.697 に答える
2

答えはここにあると信じています

基本的に、null 非許容のサイズに bool のサイズを追加します。

于 2013-04-25T13:44:28.060 に答える