读取和写入缓冲区

时间:2009-05-11 14:14:25

标签: c++ arrays pointers memory-management buffer

我有2个类,一个将多个96位对象写入缓冲区(一次32位 - 3x int32),另一个我想从同一缓冲区读取。

第一个类(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位对象,然后将指针传递给第二个(Reader)类的开头,以确保它们都能够访问对象? (读者将一次读取多个96位对象(~10,000),因此我只需要知道读取数据的开始。)

  3. 一旦Reader读取了缓冲区,我如何'重置'指针(清空缓冲区)以便我可以再次写入缓冲区?

  4. 缓冲区: 缓冲区实际上是指向posix_memalign保留的内存区域开头的指针。

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

3 个答案:

答案 0 :(得分:3)

只需使用指针运算,它将增加适当的数量(通过指向对象的大小)。

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.

答案 1 :(得分:2)

只需递增缓冲区指针即可。这应该有效:

for(int count = 0; count < 100; ++count)  // for 100 96bit objects
{
    for(int32 i = 0; i < 3; ++i)
    {
        *buffer++ = *(myInt32 + i);
    }
}

答案 2 :(得分: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++;
}