まず、環境に関する基本情報: Win7-x64 で 32 ビットをターゲットとする c# .net 4.0 を使用しています。
事前に割り当てられた大規模な配列があります。関数では、この配列内の任意のポイントへのポインターを返したいので、呼び出し元の関数はどこに書き込むかを知ることができます。元:
class SomeClass {
void function_that_uses_the_array() {
Byte [] whereToWrite = getEmptyPtrLocation(1200);
Array.Copy(sourceArray, whereToWrite, ...);
}
}
class DataProvider {
int MAX_SIZE = 1024*1024*64;
Byte [] dataArray = new Byte[MAX_SIZE];
int emptyPtr=0;
Byte[] getEmptyPtrLocation(int requestedBytes) {
int ref = emptyPtr;
emptyPtr += requestedBytes;
return dataArray[ref];
}
}
基本的に、メモリの大きなチャンクを事前に割り当て、このメモリ ブロックの任意の長さの部分を予約し、他のクラス/関数がメモリのその部分を使用できるようにします。
上記の例では、getEmptyPtrLocation 関数が正しくありません。Byte[] を返すと宣言されていますが、1 バイト値を返そうとしています。
ありがとう