0

複数の 96 ビット オブジェクトをバッファーに書き込むクラス (一度に 32 ビット - 3x int32) と、同じバッファーから読み取りたいクラスの 2 つのクラスがあります。

最初のクラス (Writer) はメモリ領域を確保し、最初の 32 ビット領域へのポインタを作成します。

  1. バッファに安全に書き込むにはどうすればよいですか (今のところバッファ オーバーフローは無視します)... 32 ビット チャンクで書き込む必要があるため、96 ビット書き込みごとに「書き込みポインタ」の位置を変更するにはどうすればよいですか 次のようなことをしますか?

    for(int count = 0; count < 100; ++count)  // for 100 96bit objects
    {
        for(int32 i = 0; i < 3; ++i)
        {
            *buffer = *(myInt32 + i);
        }
        // ** how do I move the buffer ptr to the start of the next 96bit memory space? **
    }
    
  2. メモリを確保し、多数の 96 ビット オブジェクトを書き込み、その先頭へのポインタを 2 番目の (Reader) クラスに渡して、両方が同じオブジェクトにアクセスできるようにすることは安全ですか? (Reader は 96 ビット オブジェクトの倍数 (~10,000) を一度に読み取るため、読み取りのためにデータの開始を知る必要があるだけです。)

  3. リーダーがバッファを読み取ったら、バッファに再度書き込むことができるように、ポインタを「リセット」(バッファを空にする) するにはどうすればよいですか?

バッファ: バッファは、実際には によって予約されたメモリ領域の先頭へのポインタposix_memalignです。

int32 *tempbufferPtr; 
posix_memalign ((void**)&tempbufferPtr, 8, 10000 ); // space for 10,000 objects 
writePtr = (my96bitObjectclass*)tempbufferPtr;
4

3 に答える 3

0

アンワインドのポインターのアイデアを拡張します。

typedef struct {
    int a; int b; int c;
} myobj_t;

// allocate some memory
myobj_t *myobj_p, *myobj = malloc( ... );

myobj_p = myobj;  // don't want a memory leak
while ( ... ) {
myobj.a = x;
myobj.b = y;
myobj.c = z;

myobj++;
}
于 2009-05-11T14:27:52.257 に答える