Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² срСдС WindowsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 36

Автор ДТонсон Π₯Π°Ρ€Ρ‚

Π₯отя Π΄Π΅Ρ‚Π°Π»ΠΈ описанного распрСдСлСния памяти ΠΈ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ интСрСса, здСсь ΠΎΠ½ΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚; ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ абстрактныС ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти, прСдоставляСмыС API. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программиста ОБ просто прСдоставляСт адрСсноС пространство большого объСма для размСщСния ΠΊΠΎΠ΄Π°, Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… рСсурсов. Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ сосрСдоточим своС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использовании срСдств управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Windows, Π½Π΅ Π·Π°Π±ΠΎΡ‚ΡΡΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ всС это рСализуСтся Π² ОБ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½ΠΈΠΆΠ΅ приводится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€.

ΠžΠ±Π·ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ

Обо всСх дСталях отобраТСния Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсов Π½Π° физичСскиС адрСса (virtual to physical memory mapping), ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… страничной ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ (page swapping) ΠΈ замСщСния страниц ΠΏΠΎ запросу (demand paging) ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ… заботится ОБ. Π­Ρ‚ΠΈ вопросы ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ ОБ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΊΠ½ΠΈΠ³Π΅ Π‘ΠΎΠ»ΠΎΠΌΠΎΠ½Π° (Solomon) ΠΈ Руссиновича (Russinovich) Inside Windows2000. ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ сущСствСнных свСдСний приводится Π½ΠΈΠΆΠ΅:

β€’ Π‘истСма ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшим объСмом физичСской памяти; Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ для всСх систСм, ΠΊΡ€ΠΎΠΌΠ΅ Windows XP, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ составляСт 128 ΠœΠ±Π°ΠΉΡ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… случаях доступныС ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ физичСской памяти ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большими.[21]

β€’ ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс β€” Π° Ρ‚Π°ΠΊΠΈΡ… процСссов, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ…, Ρ‚Π°ΠΊ ΠΈ систСмных, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколько β€” ΠΈΠΌΠ΅Π΅Ρ‚ собствСнноС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство, объСм ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ объСм доступного физичСского адрСсного пространства. НапримСр, Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСсного пространства объСмом 1 Π“Π±Π°ΠΉΡ‚, относящСгося ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ процСссу, Π² восСмь Ρ€Π°Π· ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ физичСской памяти объСмом 128 ΠœΠ±Π°ΠΉΡ‚, ΠΈ Ρ‚Π°ΠΊΠΈΡ… процСссов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мноТСство.

β€’ ΠžΠ‘ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ адрСса Π² физичСскиС адрСса.

β€’ Π”ля Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… страниц Π² физичСской памяти мСста Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚, поэтому ОБ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° страничныС ошибки (page faults), Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°Ρ… обращСния ΠΊ страницам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² памяти, ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ТСсткого диска β€” ΠΈΠ· систСмного Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ (swap file) ΠΈΠ»ΠΈ ΠΈΠ· ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ для программиста, страничныС ошибки ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, поэтому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ возникновСния ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ошибок Π±Ρ‹Π»Π° свСдСна ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ освСщСниС этой Ρ‚Π΅ΠΌΡ‹, рассмотрСниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ, Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² справочной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ ОБ.

На рис. 5.1 ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ располоТСниС ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ API управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Windows ΠΏΠΎΠ²Π΅Ρ€Ρ… диспСтчСра Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти (Virtual Memory Manager, VMM). API Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти Windows (VirtualAlloc, VirtualFree, Virtual-Lock, VirtualUnlock ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ†Π΅Π»Ρ‹ΠΌΠΈ страницами. API ΠΊΡƒΡ‡ΠΈ Windows управляСт Π±Π»ΠΎΠΊΠ°ΠΌΠΈ памяти, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… опрСдСляСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ адрСсного пространства Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСпосрСдствСнного ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ API, Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° Π² Windows 9x ΠΈ Windows NT ΠΈ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ информация содСрТится Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Microsoft.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΠ½ΠΎΠ³ΠΈΠΌ программистам Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ большС ΠΎ своСй срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. НачнитС исслСдованиС структуры памяти Π² вашСй систСмС с Π²Ρ‹Π·ΠΎΠ²Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

VOID GetSystemInfo(LPSYSTEM_INFO lpSystemInfo) 

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ слуТит адрСс структуры PSYSTEM_INFO, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТится информация ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° систСмной страницы, Π° Ρ‚Π°ΠΊΠΆΠ΅ адрСсах физичСской памяти, доступных для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠšΡƒΡ‡Π°

Windows ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡƒΠ»Ρ‹ памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΊΡƒΡ‡Π°ΠΌΠΈ (heaps). ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΊΡƒΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для распрСдСлСния памяти. 

Рис. 5.1. АрхитСктура систСмы управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Windows


Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях ΠΎΠ΄Π½ΠΎΠΉ ΠΊΡƒΡ‡ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ достаточно, Π½ΠΎ Π² силу ряда ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ сказано Π½ΠΈΠΆΠ΅, ΠΈΠ½ΠΎΠ³Π΄Π° цСлСсообразно ΠΈΠΌΠ΅Ρ‚ΡŒ Π² своСм распоряТСнии нСсколько ΠΊΡƒΡ‡. Если ΠΎΠ΄Π½ΠΎΠΉ ΠΊΡƒΡ‡ΠΈ Π²Π°ΠΌ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, прСдоставляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π‘ (malloc, free, calloc, realloc).

ΠšΡƒΡ‡ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Windows ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‚ дСскрипторы. ДСскриптор ΠΊΡƒΡ‡ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ распрСдСлСнии памяти. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса имССтся ΠΊΡƒΡ‡Π°, заданная ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ функция malloc ΠΈ для получСния дСскриптора ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция: 

HANDLE GetProcessHeap(VOID)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: дСскриптор ΠΊΡƒΡ‡ΠΈ процСсса; Π² случаС Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ β€” NULL. 

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ для ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL, Π° Π½Π΅ INVALID_HANDLE_VALUE, ΠΊΠ°ΠΊ Π² случаС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateFile. 

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΡƒΡ‡. Иногда для размСщСния Π² памяти ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ… оказываСтся ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Π±Ρ‹Π»Π° прСдусмотрСна своя ΠΊΡƒΡ‡Π°. ИспользованиС нСзависимых ΠΊΡƒΡ‡ обСспСчиваСт ряд прСимущСств.

β€’ ΠžΡ‚сутствиС Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ дискриминации ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Ни ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π΅ смоТСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ большС памяти, Ρ‡Π΅ΠΌ распрСдСлСно для Π΅Π΅ ΠΊΡƒΡ‡ΠΈ. Π’ частности, Ρ‚Π°ΠΊ называСмая ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти (memory leak), Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π°Ρ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° "Π·Π°Π±Ρ‹Π²Π°Π΅Ρ‚" своСврСмСнно ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π·Π°Π½ΡΡ‚ΡƒΡŽ элСмСнтами Π΄Π°Π½Π½Ρ‹Ρ…, нСобходимости Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… большС Π½Π΅Ρ‚, Π±ΡƒΠ΄Π΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ лишь Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ процСсса.[22]

β€’ ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ собствСнной ΠΊΡƒΡ‡ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΡΠΎΡΡ‚ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ общая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒΡΡ. Π‘ΠΌ. Π³Π»Π°Π²Ρƒ 9.

β€’ Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ размСщСния Π΄Π°Π½Π½Ρ‹Ρ…. Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² нСбольшой ΠΊΡƒΡ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивным, Ρ‡Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ мноТСства элСмСнтов самых Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΉ большой ΠΊΡƒΡ‡Π΅. ΠŸΡ€ΠΈ этом Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ фрагмСнтация памяти. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, прСдоставлСниС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° собствСнной ΠΊΡƒΡ‡ΠΈ сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

β€’ Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ освобоТдСния памяти. ΠžΠ±Π»Π°ΡΡ‚ΠΈ памяти, распрСдСлСнныС для ΠΊΡƒΡ‡ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ ΠΈ всСх структур Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° содСрТит, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ освобоТдСны с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ СдинствСнного Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ устранит ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ послСдствия ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти, связанной с Π΄Π°Π½Π½ΠΎΠΉ ΠΊΡƒΡ‡Π΅ΠΉ.

β€’ Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ памяти. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² нСбольшой ΠΊΡƒΡ‡Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ для всСх элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… потрСбуСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшоС количСство страниц, Π° это ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ возникновСния ошибок страниц Π² процСссС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ элСмСнтов структур Π΄Π°Π½Π½Ρ‹Ρ….

Π¦Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… прСимущСств ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ прилоТСния, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ использованиСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡƒΡ‡ΠΈ процСсса, для управлСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘. Однако Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ Π»ΠΈΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ возмоТности Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Windows Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (обсуТдаСтся ΠΏΡ€ΠΈ рассмотрСнии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ). Π’ любом случаС для создания ΠΈ уничтоТСния ΠΊΡƒΡ‡ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, описания ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… приводятся Π½ΠΈΠΆΠ΅.[23] 

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ, устанавливаСмый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ dwInitialSize (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ), всСгда округляСтся Π΄ΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΊΡ€Π°Ρ‚Π½ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ страницы, ΠΈ опрСдСляСт объСм физичСской памяти (Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСдаСтся (commit) Π² распоряТСниС ΠΊΡƒΡ‡ΠΈ (для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ распрСдСлСния памяти ΠΏΠΎ запросам) ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ, Π° Π½Π΅ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° запросы распрСдСлСния (allocation) памяти ΠΈΠ· ΠΊΡƒΡ‡ΠΈ. Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° исчСрпываСт ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ, ΠΊΡƒΡ‡Π΅ автоматичСски ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ страницы памяти Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ достигнСт установлСнного для Π½Π΅Π΅ максимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ являСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ рСсурсом, рСкомСндуСтся ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ памяти ΠΊΡƒΡ‡Π΅ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΉ срок, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π½Π΅ извСстно, ΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ потрСбуСтся. Максимально допустимый Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΡƒΡ‡ΠΈ ΠΏΡ€ΠΈ Π΅Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ динамичСского Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ опрСдСляСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° dwMaximumSize (Ссли ΠΎΠ½ΠΎ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅). Рост ΠΊΡƒΡ‡ процСссов, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚Π°ΠΊΠΆΠ΅ осущСствляСтся динамичСским ΠΏΡƒΡ‚Π΅ΠΌ. 

HANDLE HeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize) 

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: дСскриптор ΠΊΡƒΡ‡ΠΈ; Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ β€” NULL.

Π’ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΠΎΠΈΡ… упомянутых ΠΏΠΎΠ»Π΅ΠΉ, связанных с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΡƒΡ‡ΠΈ, являСтся Π½Π΅ DWORD, a SIZE_T. Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… SIZE_T опрСдСляСтся ΠΊΠ°ΠΊ 32– ΠΈΠ»ΠΈ 64-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ°, Π² зависимости ΠΎΡ‚ Ρ„Π»Π°Π³ΠΎΠ² компилятора (_WIN32 ΠΈΠ»ΠΈ _WIN64). Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Win64 (см. Π³Π»Π°Π²Ρƒ 16), ΠΈ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ 32– ΠΈ 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ этого Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… для чисСл со Π·Π½Π°ΠΊΠΎΠΌ являСтся Ρ‚ΠΈΠΏ SSIZE_T).