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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ для ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 43

Автор C. Π‘ΠΎΡ‡ΠΊΠΎΠ²

1) Никакой элСмСнт массива Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ 64 ΠšΠ±Π°ΠΉΡ‚Π°.

2) Если Ρ€Π°Π·ΠΌΠ΅Ρ€ массива большС 128 ΠšΠ±Π°ΠΉΡ‚ΠΎΠ², Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΅Π³ΠΎ элСмСнтов (Π² Π±Π°ΠΉΡ‚Π°Ρ…) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π΄Π²ΠΎΠΉΠΊΠΈ (Ρ‚. Π΅. 2, 4, 8, 16 ΠΈ Ρ‚.Π΄.). Если ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π΅Π½ 128 ΠšΠ±Π°ΠΉΡ‚Π°ΠΌ, Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΅Π³ΠΎ элСмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ 1 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 64 ΠšΠ±Π°ΠΉΡ‚ΠΎΠ² (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ).

Работая Π² максимальной ΠΌΠΎΠ΄Π΅Π»ΠΈ, программист Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ остороТСн Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ sizeof ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ языкС Π‘ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ sizeof ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ unsigned int, ΠΎΠ΄Π½Π°ΠΊΠΎ число Π±Π°ΠΉΡ‚ΠΎΠ² Π² huge массивС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏΠΎΠΌ unsigned long. Для получСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ значСния Π² этом случаС слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ sizeof:

(unsigned long)sizeof(huge_item)

Аналогично, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычитания ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² языкС Π‘ΠΈ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int. ΠŸΡ€ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ‚ΠΈΠΏΠ° huge ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ long. Π’ этом случаС Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°:

(long)(huge_ptr1β€”huge_ptr2)

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ стандартной ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти

Работая Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стандартной ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти, программист ΠΌΠΎΠΆΠ΅Ρ‚ Π² Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅, примСняя Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ near, far ΠΈ huge. ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ объявлСний с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ рассмотрСны Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 3.3.3.4 "ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ near, far, huge".

ОбъявлСниС Π΄Π°Π½Π½Ρ‹Ρ…

Если нСпосрСдствСнно Π·Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом near, far ΠΈΠ»ΠΈ huge слСдуСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Π² стандартном сСгмСнтС (для near) ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ сСгмСнтС Π΄Π°Π½Π½Ρ‹Ρ… (для far ΠΈΠ»ΠΈ huge). НапримСр, объявлСниС

char far Ρ…;

сообщаСт, Ρ‡Ρ‚ΠΎ адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ far.

Если ΠΆΠ΅ нСпосрСдствСнно Π·Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом near, far ΠΈΠ»ΠΈ huge слСдуСт ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ указатСля (Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ°), Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ адрСс Ρ‚ΠΈΠΏΠ° near, Ρ‚ΠΈΠΏΠ° far ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° huge, соотвСтствСнно. НапримСр, объявлСниС

char far *Ρ€;

сообщаСт, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ far, Ρ‚. Π΅. ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, располоТСнный Π² любом сСгмСнтС Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€ΠΈ этом Ρ‚ΠΈΠΏ адрСса этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ far). ОбъявлСниС

char * far Ρ€;

ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Ρ€ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° char, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ сам ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² любом сСгмСнтС, ΠΈ Π΅Π³ΠΎ адрСс ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ far. ОбъявлСниС

char far * far Ρ€;

сообщаСт, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с адрСсом Ρ‚ΠΈΠΏΠ° far. АдрСс самого указатСля Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ far.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

char Π°[3000]; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 1: малая модСль */

char far b[30000]; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 2: малая модСль */

char a[3000]; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 3: большая модСль */

char near b[3000]; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 4: большая модСль */

char huge a[70000]; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 5: малая модСль */

char huge *pa; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 6: малая модСль */

char *pa; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 7: малая модСль */

char far *pb; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 8: малая модСль */

char far **pa; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 9: малая модСль */

char far **pa; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 10: большая модСль */

char far *near *pb; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 11: любая модСль */

char far *far *pb; /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 12: любая модСль */

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1 массиву Π° выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² стандартном сСгмСнтС Π΄Π°Π½Π½Ρ‹Ρ…; массиву b Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° Π² любом ΠΈΠ· сСгмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π° объявлСния сдСланы Π² ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Ρ‚ΠΎ, вСроятно, массив Π° содСрТит часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ для ускорСния доступа Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² стандартном сСгмСнтС, Π° массив b содСрТит Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ 64-ΠšΠ±Π°ΠΉΡ‚Π½ΠΎΠ³ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…. МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ здСсь Π΄Ρ€ΡƒΠ³ΡƒΡŽ модСль памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ адрСс Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅Π» Π±Ρ‹ Ρ‚ΠΈΠΏ far, ΠΎΠ΄Π½Π°ΠΊΠΎ для сохранСния быстрого доступа ΠΊ массиву Π° Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠ°Π»ΡƒΡŽ модСль, Π° адрСс массива b ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ far.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 2 ΡƒΠΊΠ°Π·Π°Π½ большой Ρ€Π°Π·ΠΌΠ΅Ρ€ массива b, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ вСроятно, Ρ‡Ρ‚ΠΎ программист Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ адрСса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° большой Π΄Π»ΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ сСгмСнт.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 3, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ доступа ΠΊ массиву Π° Π½Π΅ являСтся ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΠΉ; нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ ΠΎΠ½ Π² стандартный сСгмСнт ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΌΡƒ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΠΎ 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΌΡƒ адрСсу. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 4 массиву b с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° near явно Π½Π°Π·Π½Π°Ρ‡Π΅Π½ стандартный сСгмСнт, с Ρ†Π΅Π»ΡŒΡŽ ускорСния доступа ΠΊ Π½Π΅ΠΌΡƒ Π² большой ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 5 массив Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ явно объявлСн ΠΊΠ°ΠΊ huge, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 64 ΠšΠ±Π°ΠΉΡ‚Π°. ИспользованиС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° huge вмСсто Π²Ρ‹Π±ΠΎΡ€Π° максимальной ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти Π² качСствС стандартной позволяСт ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя доступа: Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ массиву Π° ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΠΎ адрСсу Ρ‚ΠΈΠΏΠ° huge, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² стандартном сСгмСнтС. Для обращСния ΠΊ массиву Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ€Π° ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 6. ВсС арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°++) Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π°Π΄ всСми 32 Π΅Π³ΠΎ Π±ΠΈΡ‚Π°ΠΌΠΈ.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 7 Ρ€Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° near char. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ near ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 8 pb явно ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° far char. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован, Π² частности, для доступа ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ массиву, располоТСнному Π½Π΅ Π² стандартном сСгмСнтС памяти. НапримСр, Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° массив Π° ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 1, Π° pb β€” Π½Π° массив b ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 2.

Π₯отя объявлСния Ρ€Π° Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… 9 ΠΈ 10 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 9 Ρ€Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° near массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ‚ΠΈΠΏ far char, Π° Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 10 Ρ€Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° far массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ‚ΠΈΠΏ far char.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 11 pb ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° near массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ‚ΠΈΠΏ far char. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 12 pb ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° far массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ‚ΠΈΠΏ far char. Π’ этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ слов far ΠΈ near измСняСт Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ соглашСния, связанныС с модСлями памяти; Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² 9 ΠΈ 10, объявлСния pb Π½Π΅ зависят ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти ΠΈ Π² любой ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ смысл.

ОбъявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠŸΡ€Π°Π²ΠΈΠ»Π° примСнСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² near ΠΈ far Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ примСнСния ΠΈΡ… Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… Π΄Π°Π½Π½Ρ‹Ρ…. Если нСпосрСдствСнно Π·Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ слСдуСт имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово опрСдСляСт, Π² ΠΊΠ°ΠΊΠΎΠΌ сСгмСнтС Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° функция. НапримСр,

char far fun();

опрСдСляСт fun ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΏΠΎ 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΌΡƒ адрСсу ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Ρ‚ΠΈΠΏ char.

Если ΠΆΠ΅ нСпосрСдствСнно Π·Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом слСдуСт ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ указатСля (Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ°), Ρ‚ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово опрСдСляСт Ρ‚ΠΈΠΏ адрСса Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· этот ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. НапримСр,

char (far *pfun)();

опрСдСляСт pfun ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ) Π½Π° far Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ char.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ huge ΠΊ функциям ΠΈ указатСлям Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ.

ОбъявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… опрСдСлСниям ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ ΠΈ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². РСкомСндуСтся всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ со списками Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ компилятор ΠΌΠΎΠ³ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ситуации Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

char far fun(); /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 1: малая модСль */

static char far *near fun(); /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 2: большая модСль */

void far fun(); /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 3: малая модСль */

void (far *pfun)() = fun;

double far * far fun(); /* ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 4: компактная модСль */

double far* (far *pfun)() = fun;

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ fun ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ char. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово far Π² объявлСнии ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ fun вызываСтся ΠΏΠΎ 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΌΡƒ адрСсу Ρ‚ΠΈΠΏΠ° far.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ fun ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ near функция класса памяти static, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° far char. Вакая функция Π² большой ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая вызываСтся часто, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ функциями ΠΈΠ· своСго исходного Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ исходного Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ сСгмСнт, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ ΠΏΠΎ адрСсам Ρ‚ΠΈΠΏΠ° near. Π‘ΡƒΠ΄Π΅Ρ‚ ошибкой, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ адрСс Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fun Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, располоТСнной Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ сСгмСнта, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° fun, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ сСгмСнта функция fun Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π°.