フォーク後または子プロセスで共有メモリを作成する方法は?フォーク後または子プロセスで共有メモリを作成するにはどうすればよいですか?
共有メモリにグローバルポインタを作成してから、子プロセスで複数のノードを動的に作成し、このグローバルポインタにノードを追加します。
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
struct shm_t {
int data;
struct shm_t *next;
};
void main() {
struct shm_t *shm = (struct shm_t *)mmap(NULL, sizeof(*shm), PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_SHARED, 0, 0);
shm->data = 1;
shm->next = NULL;
int pid = fork();
if (pid == 0) {
printf("Child \n");
// How to create a shared shm_t here, and assign to *shm->next?
} else {
printf("Parent \n");
}
}
このような小さなチャンクに共有メモリを割り当てることは非常に効率が悪く、すばやく使い果たします。 –
あなたは必要以上の量を割り当てるのが最良です。あなた自身のアロケータ/デアロケータを実装してください(自由にするために 'MADV_DONTNEED'を使用します)。 – o11c
@イグナシオはこれを達成することは可能でしょうか? – vego