C Windows - Memory Mapped File - динамический массив в общей структуре
Я пытаюсь поделиться структурой, похожей на следующий пример:
typedef struct {
int *a;
int b;
int c;
} example;
Я пытаюсь разделить эту структуру между процессами, проблема, с которой я сталкиваюсь, заключается в том, что когда я инициализирую 'a' с помощью malloc, я не смогу получить доступ к массиву из второго процесса. Можно ли добавить этот динамический массив в файл отображения памяти?
1 ответ
Вы можете иметь это как
typedef struct {
int b;
int c;
int asize; // size of "a" in bytes - not a number of elements
int a[0];
} example;
/* allocation of variable */
#define ASIZE (10*sizeof(int))
example * val = (example*)malloc(sizeof(example) + ASIZE);
val->asize = ASIZE;
/* accessing "a" elements */
val->a[9] = 125;
трюк нулевого размера a
массив в конце структуры и malloc
больше, чем размер структуры на фактический размер a
,
Вы можете скопировать эту структуру в файл mmapped. Вы должны скопировать sizeof(example)+val->asize
байт. С другой стороны, просто прочитайте asize
и вы знаете, сколько данных вы должны прочитать - так что читайте sizeof(example)
байт, realloc
и читать дополнительно asize
байт.