У меня есть 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-битные объекты за один раз (~ 10000), поэтому мне нужно знать только начало данных для чтения.)
Как только считыватель прочитает буфер, как мне «сбросить» указатель (очистить буфер), чтобы я мог снова записать в буфер?
Буфер:
Буфер на самом деле является указателем на начало области памяти, зарезервированной posix_memalign
.
int32 *tempbufferPtr;
posix_memalign ((void**)&tempbufferPtr, 8, 10000 ); // space for 10,000 objects
writePtr = (my96bitObjectclass*)tempbufferPtr;