1

次のように定義された値の型があるとします。

[StructLayout(LayoutKind.Explicit, Size=40)]
public struct Storage
{
}

このクラスの唯一の目的は、40 バイトのメモリを占有することです。n番目のバイトを簡単に読み取る方法はありますか? たとえば、次の関数を書きたいと思います。

byte ReadFromStorage(ref Storage s, int n)
{
}

書き込みバージョンの場合も同様です。この関数のパフォーマンスを次の C コードにできるだけ近づける必要があります。

return *((char*)s + n);
4

2 に答える 2

1

代わりに、固定サイズのバッファーを使用してください。

つまり、コンテキスト内で次のことを行うことを妨げるものは何もありませんunsafe(明示的なレイアウトを使用している場合)。

unsafe byte ReadFromStorage(ref Storage s, int n)
{
    fixed(Storage* ptr = &s)
    {
       return ((byte*)ptr)[n];
    }
}
于 2013-10-23T05:24:31.633 に答える