Re: [C] как разместить структуру внутри буфера
От: MasterZiv СССР  
Дата: 04.03.19 12:52
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Как на C написать placement new для различных структур?


BFE>Допустим у меня есть предзаказанный буфер длиною N и я хочу внутри него разместить несколько разных экземпляров разных структур. Как это сделать правильно?


BFE>
BFE>typedef struct
BFE>{
BFE> ...
BFE>} MyStruct;

BFE>typedef struct
BFE>{
BFE>  const char* begin;
BFE>  const char* end;
BFE>  const char* tail;
BFE>} Buffer;

BFE>MyStruct* Create_MyStruct(Buffer* pBuffer)
BFE>{
BFE>  if ( NULL == pBuffer )
BFE>    return NULL;

BFE>  if ( pBuffer->end < pBuffer->tail + sizeof(MyStruct) )
BFE>    return NULL;

BFE>  MyStruct* pNewObj = (MyStruct*)pBuffer->tail;
BFE>  pBuffer->tail += sizeof(MyStruct);  // _Alignof(MyStruct) ?

BFE>  return pNewObj;
BFE>}
BFE>


от начала буфера размещаешь последовательно все структуры, пока хватает длины буфера,
на каждом шаге увеличиваешь указатель (void* или char*) на размер (sizeof) очередной
размещаемой структуры.
Re[2]: [C] как разместить структуру внутри буфера
От: B0FEE664  
Дата: 04.03.19 13:55
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>от начала буфера размещаешь последовательно все структуры, пока хватает длины буфера,

MZ>на каждом шаге увеличиваешь указатель (void* или char*) на размер (sizeof) очередной
MZ>размещаемой структуры.

Т.е. выравнивать на адрес кратный _Alignof(MyStructXXX) не нужно?
И каждый день — без права на ошибку...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.