β’ ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΈ (Π³Π»Π°Π²Π° 7), ΠΈΠ»ΠΈ, ΡΠΎΡΠ½Π΅Π΅, ΠΏΡΠΎΡΠ΅ΡΡ (Π³Π»Π°Π²Π° 6) ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ. Π Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΡΡΠΎΡ ΡΠ»Π°Π³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ .
β’ ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΡΡΡ ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ ΠΊΡΡ, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΡΠΎΠΉ ΠΊΡΡΠ΅.
β’ ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΡΡΠ΅ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ HeapAlloc ΠΈ HeapAlloc. ΠΠ»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ HeapLock ΠΈ HeapUnlock.
Π€Π»Π°Π³ HEAP_GENERATE_EXCEPTIONSΠ Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π²ΠΌΠ΅ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ NULL Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΠΎΠ΅Π² ΠΏΡΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ. Π ΡΠΎΠΌΡ ΠΆΠ΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΎΡΠΈΡΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊ ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π±ΡΠ»Π° ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°. ΠΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ .
ΠΠΎΠ·ΠΌΠΎΠΆΠ½Ρ Π΄Π²Π° ΠΊΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ:
1. STATUS_NO_MEMORY: ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π±Π»ΠΎΠΊ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ°. ΠΡΠΈΡΠΈΠ½Π°ΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠ°ΡΡΡΡΠ΅ΠΉ ΠΊΡΡΠ΅ΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΈΡΡΠ΅ΡΠΏΠ°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ°ΡΡΡΡΠΈΠΌΠΈ ΠΊΡΡΠ°ΠΌΠΈ.
2. STATUS_ACCESS_VIOLATION: ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΡΡΠΈ.
ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΏΡΠΈΡΠΈΠ½ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΏΠ°ΠΌΡΡΡ Ρ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.
ΠΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΡΡΠΈ
Π€ΡΠ½ΠΊΡΠΈΡ HeapCompact ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠΏΠ»ΠΎΡΠ½ΠΈΡΡ, ΠΈΠ»ΠΈ Π΄Π΅ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΠΌΠ΅ΠΆΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ Π² ΠΊΡΡΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ HeapValidate ΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΡΡΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ HeapWalk ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅Ρ Π±Π»ΠΎΠΊΠΈ Π² ΠΊΡΡΠ΅, Π° ΡΡΠ½ΠΊΡΠΈΡ GetProcessHeaps ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΊΡΡ.
Π€ΡΠ½ΠΊΡΠΈΠΈ HeapLock ΠΈ HeapUnlock ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΡΡΠ΅, ΠΎ ΡΠ΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ Π² Π³Π»Π°Π²Π΅ 8.
ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Windows 9x ΠΈΠ»ΠΈ Windows Π‘Π. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΈΠΌΠ΅ΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΠ΅Π΄ΡΠΈΠ΅ ΠΈΠ· ΡΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΠ°Π½Π΅Π΅ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ 16-Π±ΠΈΡΠΎΠ²ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ. ΠΡ ΡΠΏΠΎΠΌΡΠ½ΡΠ»ΠΈ ΠΎΠ± ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΡΡ Π»ΠΈΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π»ΠΈΡΠ½ΠΈΠΉ ΡΠ°Π· ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΡΡ ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ, Ρ ΠΎΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ.
Π Π΅Π·ΡΠΌΠ΅: ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡΡΠ°ΠΌΠΈ
ΠΠ±ΡΡΠ½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΡΡ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ:
1. ΠΠΎΠ»ΡΡΠΈΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΡΡΠΈ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ CreateΠΠ΅Π°Ρ ΠΈΠ»ΠΈ GetProcessHeap.
2. Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΠΈΠ· ΠΊΡΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ HeapAlloc.
3. Π ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΠ΅ Π²ΡΠ΅ ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ HeapFree.
4. Π£Π½ΠΈΡΡΠΎΠΆΡΡΠ΅ ΠΊΡΡΡ ΠΈ Π·Π°ΠΊΡΠΎΠΉΡΠ΅ Π΅Π΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ HeapDestroy.
ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡ ΡΠΈΡ. 5.2 ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 5.2.
Π ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΡΡ ΠΈΠ»ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΡΡ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π‘, ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ ΠΈ Π΄Π°Π»Π΅Π΅. ΠΡΠΈ ΡΡΠΎΠΌ, Π΅ΡΠ»ΠΈ ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ ΠΊΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΡΠ½ΠΊΡΠΈΡ malloc ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΈ HeapAlloc, ΡΡΠ½ΠΊΡΠΈΡ realloc β ΡΡΠ½ΠΊΡΠΈΠΈ HeapReAlloc, Π° ΡΡΠ½ΠΊΡΠΈΡ free β ΡΡΠ½ΠΊΡΠΈΠΈ HeapFree. Π€ΡΠ½ΠΊΡΠΈΡ calloc ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΈ Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π»Π΅Π³ΠΊΠΎ ΡΠΌΡΠ»ΠΈΡΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ HeapAlloc. ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ HeapSize Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π‘ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ.
ΠΡΠΈΠΌΠ΅Ρ: ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΏΠΎΠΈΡΠΊΠ°
Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , ΡΡΠ΅Π±ΡΡΡΠΈΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΡΡ, ΡΠ²Π»ΡΡΡΡΡ Π΄Π΅ΡΠ΅Π²ΡΡ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ΅ΡΠ΅Π²ΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΎΠ±Ρ ΠΎΠ΄Π° ΡΠ·Π»ΠΎΠ².
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° sortBT (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 5.1) ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ UNIX-ΠΊΠΎΠΌΠ°Π½Π΄Ρ sort Π·Π° ΡΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΏΠΎΠΈΡΠΊΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π²ΡΡ ΠΊΡΡ. ΠΠ»ΡΡΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΊΡΡΠ΅ ΡΠ·Π»ΠΎΠ² (node heap), ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»Π΅Π²ΡΠΉ ΠΈ ΠΏΡΠ°Π²ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, ΠΊΠ»ΡΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π·Π°ΠΏΠΈΡΡ Π² ΠΊΡΡΠ΅ Π΄Π°Π½Π½ΡΡ (data heap). ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΠΊΡΡΠ° ΡΠ·Π»ΠΎΠ² ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ² ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΊΡΡΠ° Π΄Π°Π½Π½ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΎΠ±Ρ ΠΎΠ΄Π° Π΄Π΅ΡΠ΅Π²Π°.
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ Π²ΡΠ±ΡΠ°Π½Ρ ΠΏΠ΅ΡΠ²ΡΠ΅ 8 Π±Π°ΠΉΡΠΎΠ² ΡΡΡΠΎΠΊΠΈ, Π° Π½Π΅ ΡΠ΅Π»Π°Ρ ΡΡΡΠΎΠΊΠ°. Π Π΄Π²ΡΡ Π΄ΡΡΠ³ΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π² Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ 5.4 ΠΈ 5.5), Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π° ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΡΠ΅Ρ ΡΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π.
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΡΡ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΠΈΡ. 5.2. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΡΠΏΡΠ°Π²Π°, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ Π»ΠΈΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. Π Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅, ΡΡ Π΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½ΠΎΠΌ ΡΠ»Π΅Π²Π°, Π²ΡΠ΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡΡ Π΄Π»Ρ ΡΡΠ΅Ρ ΠΊΡΡ, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΈΠΌΠ΅ΡΡΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 5.1 Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΈΡΡΠ½ΠΊΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠ΅Π½Ρ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ Π² ΠΊΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΡ ΠΈ Π±Π»ΠΎΠΊΠΎΠ² Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΊΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Windows, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄ΡΡΡΠΎΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΎΡΡ ΠΊΡΡΠΈ ΡΠ²Π΅ΡΡ Π΅Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠ»Π΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ°ΡΡΡΡΠ΅ΠΉ ΠΊΡΡΠΈ Ρ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠΆΠ΅ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ Π΄Π΅Π»Π°ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ; ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌΠΈ.
Π ΠΈΡ. 5.2. Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΡΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 5.1 ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΡΠΎΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½ΠΎ Π±ΡΠ»ΠΈ Π±Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π‘ ΠΈΠ»ΠΈ ΠΆΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
β’ ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ·Π»ΠΎΠ² ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΊΡΡΠ΅, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΊΡΡΠ΅.
β’ ΠΠΎΡΠΎΠ²ΡΡΡ ΠΊ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅Ρ Π΄Π²Π΅ ΠΊΡΡΠΈ, Π° Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΏΠ°ΠΌΡΡΡ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
β’ ΠΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠ΅Π³ΠΎ ΠΎΡΠΏΠ°Π΄Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π½ΡΠ»Π΅Π²ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Windows, ΡΠΎ ΡΡΠ΅ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 5.1, ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π²Π΅ΡΡ ΡΠ°ΠΉΠ» ΠΈ ΠΊΠΎΠΏΠΈΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ. ΠΠ±ΡΠΎΠ»ΡΡΠ½ΡΠΉ Π²Π΅ΡΡ Π½ΠΈΠΉ ΠΏΡΠ΅Π΄Π΅Π» ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ°ΠΉΠ»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ³ΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° (ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 3 ΠΠ±Π°ΠΉΡ); ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΡΠΉ ΠΏΡΠ΅Π΄Π΅Π» ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΠΈΠΌ. Π ΡΠ»ΡΡΠ°Π΅ Win64 ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 5.1 Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ: FillTree, InsertTree, Scan ΠΈ TreeCompare. ΠΡΠ΅ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 5.2.
Π ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΡΡΠΈ. ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΡΡΡΠΏΠΈΡΡ ΠΈΠ½Π°ΡΠ΅, ΠΎΡΠΊΠ°Π·Π°Π²ΡΠΈΡΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π°Π³Π° HEAP_GENERATE_EXCEPTIONS ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ ΠΏΡΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 5.1. sortBT: ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΏΠΎΠΈΡΠΊΠ°/* ΠΠ»Π°Π²Π° 5. ΠΠΎΠΌΠ°Π½Π΄Π° sortBT. ΠΠ΅ΡΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΠΎΠΈΡΠΊΠ°.*/
#include "EvryThng.h"
#define KEY_SIZE 8
typedef struct _TreeNode {/* ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΡΠ·Π»Π°. */
struct _TreeNode *Left, *Right;
TCHAR Key[KEY_SIZE];
LPTSTR pData;
} TREENODE, *LPTNODE, **LPPTNODE;
#define NODE_SIZE sizeof(TREENODE)
#define NODE_HEAP_ISIZE 0x8000
#define DATA_HEAP_ISIZE 0x8000
#define MAX_DATA_LEN 0x1000
#define TKEY_SIZE KEY_SIZE * sizeof(TCHAR)
LPTNODE FillTree(HANDLE, HANDLE, HANDLE);
BOOL Scan(LPTNODE);
int KeyCompare (LPCTSTR, LPCTSTR); iFile;
BOOL InsertTree (LPPTNODE, LPTNODE);
int _tmain(int argc, LPTSTR argv[]) {
HANDLE hIn, hNode = NULL, hData = NULL;
LPTNODE pRoot;
CHAR ErrorMessage[256];
int iFirstFile = Options(argc, argv, _T("n"), &NoPrint, NULL);
/* ΠΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. */
for (iFile = iFirstFile; iFile < argc; iFile++) __try {
/* ΠΡΠΊΡΡΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ». */
hIn = CreateFile(argv[iFile], GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hIn == INVALID_HANDLE_VALUE) RaiseException(0, 0, 0, NULL);
__try { /* Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΄Π²Π΅ ΠΊΡΡΠΈ. */
hNode = HeapCreate(HEAP_GENERATE_EXCEPTIONS | HEAP_NO_SERIALIZE, NODE_HEAP_ISIZE, 0);
hData = HeapCreate(HEAP_GENERATE_EXCEPTIONS | HEAP_NO_SERIALIZE, DATA_HEAP_ISIZE, 0);
/* ΠΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ», ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π΄Π΅ΡΠ΅Π²ΠΎ. */