1
如何在fork或子进程之后创建共享内存?如何在fork或子进程之后创建共享内存?
我想首先在共享内存中创建一个全局指针,然后在子进程中动态创建多个节点并将该节点添加到这个全局指针。
#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
@Ignacio是否有可能实现这一目标? – vego