Содержимое
🚀В Linux каждый процесс живёт в своей версии памяти. Два разных приложения могут одновременно использовать один и тот же адрес, например 0x555555..., но попадать при этом в совершенно разные места физической RAM. Почему так? Потому что процесс видит не настоящую физическую память, а virtual address space - виртуальное адресное пространство. Когда программа делает malloc, она получает адрес, который выглядит как обычный указатель: int *x = malloc(sizeof(int)); *x = getpid(); printf("PID %d -> virtual address: %p -> value: %d\n", getpid(), (void*)x, *x); Если запустить такую программу в двух терминалах, адрес может оказаться одинаковым. Но это не значит, что процессы пишут в одну и ту же память. Для каждого процесса ядро и MMU переводят виртуальные адреса в свои физические страницы. Один и тот же виртуальный адрес в процессе A может указывать на один участок RAM, а в процессе B - на другой. Именно поэтому процессы изолированы друг от друга. Программа думает: «Это моя память». На самом деле Linux говорит: «Это твоя иллюзия памяти. А куда она реально мапится - решаю я». Виртуальная память - одна из тех штук, без которых не было бы нормальной изоляции процессов, безопасного multitasking, shared libraries, fork, mmap и современного Linux в целом.