我對下面複製粘貼的程序有疑問。我在這裏解釋我對程序的理解:在這個程序中,父母創建一個孩子並等待它完成。然後,孩子創建一個線程並等待它完成。因此,變量'值'在子進程中的值爲'5',在父進程中的值爲'0',因爲實際上有兩個副本變量''值'其中一個在父級和其他在子項中(因爲fork基本上是將父項的地址空間複製到子項)。然而,父母和孩子的變量'值'的地址都是相同的。我不明白如何。如果有人能解釋這種行爲,我將不勝感激。親子子線程程序的奇怪行爲
#include <stdio.h>
#include <pthread.h>
int value = 0;
void *runner(void *param);
int main()
{
int pid ;
pthread_t tid;
pthread_attr_t attr;
pid = fork();
if(pid == 0) /* child */
{
pthread_attr_init(&attr);
pthread_create(&tid, &attr, runner, NULL);
pthread_join(tid, NULL);
printf("CHILD: value = %d, address = %p\n", value, &value);
}
else if(pid > 0) /* Parent */
{
wait(NULL);
printf("PARENT: value = %d, address = %p\n", value, &value);
}
}
void *runner(void *param)
{
value = 5;
pthread_exit(0);
}
糾正我,如果我錯了。虛擬地址不應該是唯一的嗎? – 2011-06-10 13:56:14
這可能意味着地址0xDEADBEEF將轉換爲任何兩個進程的不同內存位置。 – 2011-06-10 13:58:24
這是否意味着程序以某種方式打印偏移量?然後將其轉換爲物理地址? – 2011-06-10 14:03:59