Если вы создали новый процесс, а не новый поток, то он по определению имеет собственное адресное пространство процесса.
Каждое адресное пространство процесса будет иметь одинаковый диапазон виртуальных адресов - 0x00000000 - 0xffffffff
на 32-разрядной машине. Каждый процесс будет иметь виртуальный адрес n , для чего он будет использоваться и будет ли он отображаться на что-либо, что существует физически. Некоторая часть этого адресного пространства будет использоваться ядром, а другая может использоваться совместно (см. Также man mmap
).
После fork()
вы не должны удивляться, если виртуальные адреса идентичны в обоих процессах (хотя это не может быть гарантировано для новых операций с памятью после fork
) - это не означает, что копирование при записи является не работает, это невидимо для нормального кода.
Страницы не обязательно находятся в ОЗУ (физической памяти), но могут храниться в файле подкачки или подкачки (используемые термины могут различаться) до тех пор, пока это не потребуется. Виртуальный адрес относится к таблице страниц, которая знает, где в действительности находится ее страница. Когда копирование при записи активируется, это означает, что создается новая страница, это не означает, что виртуальный адрес изменяется, он останется прежним, но в таблице страниц будет указано другое физическое местоположение.
Почему вы хотите знать в любом случае? Этот вид операции находится в области операционной системы.