Tôi mới vào "fork()", tôi đọc ở khắp mọi nơi khi một ngã ba() được gọi là bản sao chính xác của quá trình hiện tại (gọi) được bắt đầu. Khi tôi chạy mã sau, cần có hai quy trình khác nhau, hai vị trí bộ nhớ khác nhau được gán cho các vars và chức năng của chúng.Cách bộ nhớ được ánh xạ khi sử dụng nĩa?
#include<stdio.h>
int i=10;
int pid;
int main(){
if((pid=fork())==0){
i++;//somewhere I read that separate memory space for child is created when write is needed
printf("parent address= %p\n",&i);// this should return the address from parent's memory space
}else{
i++;
i++;
printf("child address= %p\n",&i);// this should return the address of child's memory space
}
wait(0);
return(0);
}
Why The output looks like:: child address::804a01c parent address::804a01c
Tại sao cả hai địa chỉ là như nhau cho cha mẹ cũng như đứa trẻ?
Chúng * tốt hơn * giống nhau. Bạn muốn các con trỏ tham chiếu bộ nhớ theo cùng một cách trong cả hai quy trình (ngay cả khi cả hai khối bộ nhớ đều khác nhau). Đọc về * bộ nhớ ảo *, điều này sẽ trả lời câu hỏi của bạn. –
Lưu ý rằng * giá trị * của 'i' khác nhau giữa cha mẹ và con, mặc dù cả hai bản sao được lưu trữ tại cùng một địa chỉ ảo. – markgz