c - C 中的 fork() 和 POSIX 中共享内存的内存表示

标签 c memory posix fork shared-memory

我正在研究 POSIX 共享内存。

我不明白内部实现。进程如何共享内存。 我看到一些视频告诉我们进程实际上不共享内存,即如果进程 A 和进程 B 共享某个变量(例如 x),那么进程 A 和 B 中包含 x 的逻辑页面实际上指向同一个帧在主存中,这就是进程共享内存的方式。

我的问题是:

  1. 这就是当我们 fork() 进程时发生的情况(正如我上面提到的)? (我的意思是假设进程 A 已经打开了 file1 file2 并且有变量 a,b,c 现在如果进程 A fork 了进程 B ,进程 B 可以访问所有这些文件和变量。)

  2. 如果不是,那么如何实现该实现?

  3. 如果是,那么如何在不相关的进程之间共享内存?

最佳答案

  1. 不,这两个进程对所有内容都有自己独立的副本。请注意,这些副本可能不兼容;例如,让两个进程都写入一个公共(public)文件可能会以泪水告终。

  2. 你不能;您需要明确分享您想要分享的所有内容。

  3. 使用shm_open和 friend 。

关于c - C 中的 fork() 和 POSIX 中共享内存的内存表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19278433/

相关文章:

c - 它在C中创建了一个数组,当程序从内存中出来时会发生什么?

c - __typeof__ 宏扩展为函数名

posix - "posix isolation"是什么?

c++ - 我可以从 C 或 C++ 外部控制 Chrome 扩展程序吗?

c - 如何将一个 8 位颜色值拆分为两个 4 位颜色值?

c - 如何在不使用 C 语言中的整数类型的情况下将 2 uint8 模乘一个大数

Javascript:循环内存泄漏?

c - 一般 Quick fork() 解释

c - 初始化时内存将分配给 "Uninitialized Static variable"在哪里?

c - 访问共享内存中的结构后出现段错误?