私の安全でないメソッドは、コレクションbyte[]
s を受け入れます。これらbyte[]
の はすべて同じサイズです。
特定のパターンを探して、それらすべてを反復処理する必要があります。検索は本質的に再解釈キャスト スタイルです。各オフセットで、値を float、double、short、int などであるかのように考慮する必要がありますbyte*
。byte[]
自然なアプローチのように。
byte*
残念ながら、コレクションを作成する方法、またはより具体的には、配列のコレクションから初期化する方法が見つかりません。何か案は?
これは、タスクのやや不自然なバージョンです。
static unsafe void SearchIteration(List<byte[]> arrays, byte[] resultArr)
{
fixed (byte* resultFix = resultArr)
{
byte* resultPtr = resultFix;
byte*[] pointers = new byte*[arrays.Count];
<some code to fix all the arrays and store the pointers in "pointers">
int remaining = resultArr.Length;
while (remaining > 0)
{
<look at resultPtr and each of the pointers and update *resultPtr>
remaining--;
for (int i = 0; i < pointers.Length; i++)
pointers[i]++;
}
}
}
基本的に問題は、GC が配列を移動しないように配列を固定しながらpointers
、 のアドレスで初期化する方法です。arrays