簡體   English   中英

C Windows-內存映射文件-共享結構中的動態數組

[英]C Windows - Memory Mapped File - dynamic array within a shared struct

我正在嘗試共享類似於以下示例的結構:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM