【发布时间】:2015-11-14 20:10:35
【问题描述】:
假设我编译并运行 fork() 的教科书示例。
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(void)
{
pid_t pid;
pid = fork();
if (pid == -1)
return 1;
if (pid == 0)
puts("From child process.");
else
puts("From parent process.");
return 0;
}
if (pid == 0) 语句的两个分支的代码是否都位于fork()?换句话说,子进程是否包含永远不会被父进程执行的代码,反之亦然?或者编译器是否/可以对此进行优化?
【问题讨论】:
-
是的。但这没关系。优化在操作系统而不是编译器中。文本段将由所有分叉进程共享。也就是说,操作系统会将文本段的相同物理内存映射到每个分叉进程中。事实上,在写入特定数据页之前,即使数据也是共享的(即,写入时复制)。
标签: c memory optimization concurrency fork