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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π€ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² DelphiΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 6

Автор Π”ΠΆΡƒΠ»ΠΈΠ°Π½ Π‘Π°ΠΊΠ½Π΅Π»Π»

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° страницы. Π’ систСмах Win32 с процСссорами Pentium Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠΉ страницы составляСт 4 Кб. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Win32 Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ памяти объСмом 4 Π“Π± Π½Π° страницы ΠΏΠΎ 4 Кб. ΠŸΡ€ΠΈ этом Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницС содСрТится нСбольшой объСм слуТСбной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ самой страницС. (ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Linux Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.) Π—Π΄Π΅ΡΡŒ содСрТатся Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ‚ΠΎΠΌ, занята страница ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Занятая страница - это страница, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Если страница Π½Π΅ занята, Π΅Π΅ Π½Π΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅. Π›ΡŽΠ±Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ доступа.

Π”Π°Π»Π΅Π΅, Π² ΡΠ»ΡƒΠΆΠ΅Π±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ссылка Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° страниц. Π’ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ систСмС с 256 Мб памяти (Ρ‡Π΅Ρ€Π΅Π· нСсколько Π»Π΅Ρ‚ эта Ρ„Ρ€Π°Π·Π°, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ смСх) доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 65536 физичСских страниц. Π’Π°Π±Π»ΠΈΡ†Π° трансляции страниц связываСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ страницу памяти прилоТСния с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ страницСй, доступной Π² ΠžΠ—Π£. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ доступа прилоТСния ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ адрСсу опСрационная систСма выполняСт Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСса Π² физичСский адрСс ΠžΠ—Π£.

Если Π² систСмС Win32 Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ нСсколько ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° всС физичСскиС страницы ΠžΠ—Π£ заняты, Π° ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ трСбуСтся Π·Π°Π½ΡΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ страницу. Но это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ свободных страниц Π½Π΅Ρ‚. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС опСрационная систСма записываСт Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ страницу Π½Π° ТСсткий диск (этот процСсс называСтся ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΎΠΉ ΠΈΠ»ΠΈ свопингом (swapping)) ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ трансляции, Ρ‡Ρ‚ΠΎ страница Π±Ρ‹Π»Π° записана Π½Π° диск, послС Ρ‡Π΅Π³ΠΎ физичСская страница помСчаСтся ΠΊΠ°ΠΊ занятая ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

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

ВсС описанноС Π²Ρ‹ΡˆΠ΅ Π² 32-разрядной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС происходит постоянно. ЀизичСскиС страницы Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° диск ΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ с диска. ΠŸΡ€ΠΈ этом ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ трансляции страниц. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв простой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π΅Ρ‚, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ситуация. И эта ситуация называСтся пробуксовка (thrashing).

ΠŸΡ€ΠΎΠ±ΡƒΠΊΡΠΎΠ²ΠΊΠ°

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

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ прСдставим сСбС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ считываСт Π±Π»ΠΎΠΊΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, сначала ΠΎΠ½ΠΎ считываСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° 56, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ² 123, 12, 234 ΠΈ Ρ‚.Π΄. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ возникновСния ошибки отсутствия страницы увСличиваСтся. ΠŸΡ€ΠΈ этом всС большСС ΠΈ большСС количСство страниц Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° диск ΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ с диска. Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ диска Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ€Π΅Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ постоянно, Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния ΡƒΠΏΠ°Π΄Π΅Ρ‚. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ пробуксовка - Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ ΠΎΠ±ΠΌΠ΅Π½ страницами ΠΌΠ΅ΠΆΠ΄Ρƒ диском ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΉ запросами прилоТСния страниц Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС лСкарства ΠΎΡ‚ пробуксовки Π½Π΅Ρ‚. Π‘ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±Π»ΠΎΠΊΠΈ памяти Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ динамичСского распрСдСлСния памяти Delphi. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, программист Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ располоТСниСм Π±Π»ΠΎΠΊΠΎΠ² памяти. ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ связанныС Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… хранятся Π² Ρ€Π°Π·Π½Ρ‹Ρ… страницах. (Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠ΄ словом "связанныС" понимаСтся Π±Π»ΠΎΠΊΠΈ памяти, Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, вСроятно, Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сами Π΄Π°Π½Π½Ρ‹Π΅ связаны.) Одним ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сниТСния риска возникновСния пробуксовки являСтся использованиС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΡƒΡ‡ для выдСлСния памяти для структур ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Но Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ выдСлСния Π² настоящСй ΠΊΠ½ΠΈΠ³Π΅ Π½Π΅ приводится.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ элСмСнты ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° TList. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· элСмСнтов содСрТит, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΎΠ΄Π½Ρƒ строку, ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выдСляСтся ΠΈΠ· ΠΊΡƒΡ‡ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ 32-разрядным Delphi ΠΈ элСмСнт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ строки). А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ прСдставим сСбС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, ΠΈ элСмСнты Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ TList Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ добавлялись ΠΈ ΡƒΠ΄Π°Π»ΡΠ»ΠΈΡΡŒ. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ экзСмпляр TList, Π΅Π³ΠΎ элСмСнты ΠΈ строки элСмСнтов распрСдСлСны ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ страницам памяти. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ считывании элСмСнтов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° TList ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ страницам, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΎΠ±ΠΌΠ΅Π½Ρƒ страницами ΠΌΠ΅ΠΆΠ΄Ρƒ диском ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Если количСство элСмСнтов достаточно ΠΌΠ°Π»ΠΎ, всС страницы, относящиСся ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² памяти. Но Ссли Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ TList элСмСнтов насчитываСтся нСсколько ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ², ΠΏΡ€ΠΈ ΠΈΡ… считывании ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ состояниС пробуксовки.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ссылок

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

НапримСр, массив записСй ΠΈΠΌΠ΅Π΅Ρ‚ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ссылок. Π’Π°ΠΊ, элСмСнт с индСксом 1 Π² памяти находится рядом с элСмСнтом с индСксом 2 ΠΈ Ρ‚.Π΄. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ считываСт всС записи массива, Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ссылок Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ высокой. ОбмСн страницами ΠΌΠ΅ΠΆΠ΄Ρƒ диском ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ. ЭкзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° TList, содСрТащий ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ записСй, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это Ρ‚ΠΎΠΆΠ΅ массив, фактичСски содСрТащий Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ссылок. Как Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ€Π°Π½Π΅Π΅, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ страницС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ считываниС элСмСнтов Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ диском ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. БвязанныС списки (см. Π³Π»Π°Π²Ρƒ 3) Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π½ΠΈΠ·ΠΊΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ссылок.

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

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ссылок Π² смыслС расстояния ("ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ находится Π² памяти рядом с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ"), Π½ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ссылок ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли элСмСнт Π½Π΅Π΄Π°Π²Π½ΠΎ использовался, ΠΎΠ½ скоро Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ снова, ΠΈΠ»ΠΈ, скаТСм, элСмСнт X всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСстС с элСмСнтом Y. Π’ΠΎΠΏΠ»ΠΎΡ‰Π΅Π½ΠΈΠ΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ссылок Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ являСтся кэш-ΠΏΠ°ΠΌΡΡ‚ΡŒ. Кэш-ΠΏΠ°ΠΌΡΡ‚ΡŒ (cache) прСдставляСт собой нСбольшой Π±Π»ΠΎΠΊ памяти для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ процСсса, содСрТащий элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовались Π½Π΅Π΄Π°Π²Π½ΠΎ. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ использовании элСмСнта ΠΎΠ½ копируСтся Π² кэш-ΠΏΠ°ΠΌΡΡ‚ΡŒ. Если кэш Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов примСняСтся Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… элСмСнтов (least recently used, LRU), ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π²Π½ΠΎ Π½Π΅ использовался, замСщаСтся Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ элСмСнтом. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, кэш-ΠΏΠ°ΠΌΡΡ‚ΡŒ содСрТит нСсколько Π±Π»ΠΈΠ·ΠΊΠΈΡ… Π² пространствСнном смыслС элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΏΠΎΠΌΠΈΠΌΠΎ всСго ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, Π±Π»ΠΈΠ·ΠΊΠΈ ΠΈ Π² смыслС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΡ… использования.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ кэш-ΠΏΠ°ΠΌΡΡ‚ΡŒ примСняСтся для элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся Π½Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… устройствах. Π’ качСствС классичСского ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ привСсти дисковый кэш. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, тСорСтичСски кэш Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти ΠΌΠΎΠ³ Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, особСнно с прилоТСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большого объСма памяти ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… с нСбольшими объСмами ΠžΠ—Π£.