C Windows - 内存映射文件 - 共享结构中的动态数组

时间:2015-04-19 14:36:17

标签: c malloc memory-mapped-files

我试图分享类似于以下示例的结构:

typedef struct { 
    int *a; 
    int b; 
    int c;
} example;

我试图在流程之间共享这个结构,我发现的问题是,当我初始化' a'使用malloc,我无法从第二个进程中访问该数组。 是否可以将此动态数组添加到内存映射文件中?

1 个答案:

答案 0 :(得分:0)

你可以把它作为

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字节。