Consider the following code snippet.
if (fork() == 0)
{
a = a + 5;
printf("%d, %d \n", a, &a);
}
else
{
a = a - 5;
printf ("%d, %d \n", a,& a);
}
AFAIK, when fork() is made, the virtual address space of parent is copied to the child and both child & parent share the same physical pages until one of them tries to modify. The moment one of the child & parent modifies a variable, the physical page of parent is copied to another page for child and the physical pages remain private.
So, here value of ‘a’ is different in child & parent. But when it comes for the addresses of ‘a’ in child & parent, the output is same. I am not able to figure out why the address remains same even if the physical pages are diffrent.
The address of
ais not the actual physical address.It is a virtual address.
The hardware/OS layer maps virtual addresses to physical addresses (invisibly to your application).
So even though the addresses have the same
numberthey do not map to the same physical memory on your ram chip.PS. When printing the address (ie pointer) using printf() best to use “%p”