2009-05-11 11 views
0

私はバッファに複数の96ビットオブジェクト(一度に32ビット - 3x int32)を書き込むクラスと、同じバッファから読み込みたいバッファという2つのクラスを持っています。バッファへの読み書き

第1クラス(ライター)はメモリを予約し、最初の32ビット領域へのポインタを作成します。

  1. 私は(今のバッファオーバーフローを無視して)安全にバッファへの書き込みにはどうすればよい...私は32ビットのチャンクで記述する必要があるので、どのように私は、各96bitの書き込みの間の「書き込みポインタ」の位置を変更できますか?私はメモリを確保するため

    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. それが安全である、96bitオブジェクトの数を書き、そして確実にするために、第二(リーダー)クラスへの先頭へのポインタを渡す:私のような何かを行うのですか彼らは両方とも同じオブジェクトにアクセスできますか? (読者は一度に96bitオブジェクトの倍数を読みます(〜10,000)ので、読み込みの開始点を知る必要があります)。

  3. リーダーがバッファを読み終えたら、どうすればリセットできますか? '私は再びバッファに書き込むことができるようにポインタ(バッファを空にする)?

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

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

なぜそれがコミュニティのwikiですか? –

+0

"バッファ"変数の定義を表示してください。 –

+0

@aJ - なぜですか? :)とにかくそれはどういう意味ですか? @Neil - バッファは実際にはposix_memalignによって確保されたメモリ領域の先頭へのポインタです。 int32 * tempbufferPtr; posix_memalign((void **)&tempbufferPtr、8、10000)// 10,000個のオブジェクトのスペース writePtr =(my96bitObjectclass *)tempbufferPtr; – Krakkos

答えて

2

ポインター演算を使用すると、ポインティング対象オブジェクトのサイズだけ適切な量だけ増加します。

int32 *ptr = ...; 

*ptr++ = 1; 
*ptr++ = 2; 
*ptr++ = 3; 

// Here, ptr has been advanced by 3 times 32 bits, and is pointing at the next location. 
2

バッファポインタを単にインクリメントします。これは動作するはずです:

アンワインドのポインタアイデアに拡大
for(int count = 0; count < 100; ++count) // for 100 96bit objects 
{ 
    for(int32 i = 0; i < 3; ++i) 
    { 
     *buffer++ = *(myInt32 + i); 
    } 
} 
+0

このインクリメントは、割り当ての前または後に行われますか? 3つの整数を書き込んだ後、ポインタは次の3つの正しい場所を指しているでしょうか? – Krakkos

+0

それぞれの割り当て後にインクリメントが発生します。バッファは、次の反復で正しいアドレスを指している必要があります。 Btw読みやすくするために、*(myInt32 + i)の代わりにmyInt32 [i]を書くことをお勧めします。 –

+0

はmyInt32 [i]、*(myInt32 + i)は同等ですか?最初にmyInt32を配列として定義する必要がありますか? – Krakkos

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++; 
} 
関連する問題