我有2个类,一个将多个96位对象写入缓冲区(一次32位 - 3x int32),另一个我想从同一缓冲区读取。
第一个类(Writer)保留内存区域并创建指向第一个32位区域的指针。
如何安全地写入缓冲区(暂时忽略缓冲区溢出)...我需要用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? **
}
我是否可以保留内存,写入多个96位对象,然后将指针传递给第二个(Reader)类的开头,以确保它们都能够访问对象? (读者将一次读取多个96位对象(~10,000),因此我只需要知道读取数据的开始。)
一旦Reader读取了缓冲区,我如何'重置'指针(清空缓冲区)以便我可以再次写入缓冲区?
缓冲区:
缓冲区实际上是指向posix_memalign
保留的内存区域开头的指针。
int32 *tempbufferPtr;
posix_memalign ((void**)&tempbufferPtr, 8, 10000 ); // space for 10,000 objects
writePtr = (my96bitObjectclass*)tempbufferPtr;
答案 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++;
}