gpt4 book ai didi

pointers - 在多个 fork 进程之间共享指针

转载 作者:行者123 更新时间:2023-12-02 21:37:35 25 4
gpt4 key购买 nike

如果我想使用 shm_openfork() 进程之间共享诸如 char **keys 数组之类的内容mmap 我可以将keys 的指针粘贴到共享内存段中,还是必须将keys 中的所有数据复制到共享内存段中?

最佳答案

您想要共享的所有数据都必须位于共享段中。这意味着指针和字符串都必须位于共享内存中。

共享包含指针的内容可能很麻烦。这是因为 mmap 不保证给定的映射最终会出现在所需的地址中。

您仍然可以通过两种方法来执行此操作。首先,您可以使用 mmap 碰碰运气,并希望动态链接器不会在您首选的地址加载某些内容。

第二种方法是使用相对指针。在指针内部,不是存储指向字符串的指针,而是存储指针地址和字符串地址之间的差值。就像这样:

char **keys= mmap(NULL, ...);
char *keydata= (char*) keys + npointers * sizeof(char*);
strcpy(keydata, firstring);
keys[0]= (char*) (keydata - (char*) &keys[0]);
keydata+= strlen(firststring)+1;

当您想从其他进程访问字符串时,请执行相反的操作:

char **keys= mmap(NULL, ...);
char *str= (char*) (&keys[0]) + (ptrdiff_t) keys[0];

这有点麻烦,但无论 mmap 返回什么它都会起作用。

关于pointers - 在多个 fork 进程之间共享指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19200951/

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