0

我有 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)类,以确保它们都能够访问相同的对象?(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

3

Just use pointer arithmetic, it will increase by the proper amount (by the size of the pointed-to object).

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.
于 2009-05-11T14:19:19.997 回答
2

只需增加缓冲区指针。这应该有效:

for(int count = 0; count < 100; ++count)  // for 100 96bit objects
{
    for(int32 i = 0; i < 3; ++i)
    {
        *buffer++ = *(myInt32 + i);
    }
}
于 2009-05-11T14:24:35.790 回答
0

扩展 unwind 的指针思想:

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 回答