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 байт.

Другие вопросы по тегам