2015-04-19 1 views
0

Je suis en train de partager un struct similaire à l'exemple suivant:C Windows - La mémoire mappée fichier - tableau dynamique au sein d'une structure commune

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

Je suis en train de partager struct entre les processus, le problème Je trouve que lorsque j'initialise 'a' avec malloc, je ne peux pas accéder au tableau depuis le second processus. Est-il possible d'ajouter ce tableau dynamique au fichier mappé en mémoire?

Répondre

0

Vous pouvez avoir comme

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; 

l'astuce est de zéro taille tableau a à la fin de la structure et malloc format plus large de la structure par taille réelle de a.

Vous pouvez copier cette structure dans un fichier mmapped. Vous devez copier sizeof(example)+val->asize octets. De l'autre côté, il suffit de lire asize et vous savez combien de données vous devriez lire - alors lisez sizeof(example) octets, realloc et lisez asize octets supplémentaires.