【发布时间】:2014-01-22 11:17:35
【问题描述】:
我很难理解程序的输出。使用fork() 后,变量inmem 的内存位置显示相同。
有人可以解释一下吗!
谢谢
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int inmem = 9;
int pid = fork();
if(!pid)
{
printf("child inmem %d %p\n", inmem,&inmem);
inmem = 8;
printf("child inmem %d %p\n", inmem, &inmem);
}
else
{
printf("parent inmem %d %p\n", inmem, &inmem);
inmem = 5;
printf("parent inmem %d %p\n", inmem, &inmem);
}
return 0
}
输出-
parent inmem 9 0x7ffff0acdfc8
parent inmem 5 0x7ffff0acdfc8
child inmem 9 0x7ffff0acdfc8
child inmem 8 0x7ffff0acdfc8
【问题讨论】:
-
有一些系统调用在几个不同的进程之间共享>虚拟内存。请参阅 shm_overview(7) 和 mmap(2)。您需要同步,请参阅sem_overview(7)。阅读Advanced Linux Programming
-
为什么没有加入
#include <unistd.h>? -
请不要忽略编译器警告。使用
-Wall编译您的代码并注意,这一次,您将看到您需要将传递给printf的指针转换 到(void *) -
在 gcc 中使用标志
-Wall -Werror -Wextra -pedantic -pedantic-errors。它将使您编写符合标准且安全的代码。
标签: c linux memory-management fork ambiguous