ΠΠ²Π° ΡΠ°Π·Π½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π°Π΄ΡΠ΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 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 Π³ΠΎΠ²ΠΎΡΠΈΡ: Β«ΠΡΠΎ ΡΠ²ΠΎΡ ΠΈΠ»Π»ΡΠ·ΠΈΡ ΠΏΠ°ΠΌΡ
π Π Linux ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΆΠΈΠ²ΡΡ Π² ΡΠ²ΠΎΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ
ΠΡΠ΅ΡΠ°ΠΡΠ΅ΡΠ°
3
1 ΠΌΠΈΠ½