【问题标题】:C Windows - Memory Mapped File - dynamic array within a shared structC Windows - 内存映射文件 - 共享结构中的动态数组
【发布时间】:2015-04-19 14:36:17
【问题描述】:

我正在尝试共享类似于以下示例的结构:

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

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

【问题讨论】:

    标签: c malloc memory-mapped-files


    【解决方案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 的实际大小。

    您可以将此结构复制到映射文件。您应该复制sizeof(example)+val->asize 字节。另一方面,只需读取asize,您就知道应该读取多少数据 - 因此读取sizeof(example) 字节、realloc 并读取额外的asize 字节。

    【讨论】:

      猜你喜欢
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多