gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:16:12 25 4
gpt4 key购买 nike

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

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

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

最佳答案

您可以将其作为

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

关于C Windows - 内存映射文件 - 共享结构内的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com