Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

ΠžΠ±ΡŒΠ΅ΜΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΜΠ΄ΡƒΠ»ΡŒ (Ρ‚Π°ΠΊΠΆΠ΅ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π°Π½Π³Π». object file ) β€” Ρ„Π°ΠΉΠ» с ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ прСдставлСниСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ модуля ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ исходного ΠΊΠΎΠ΄Π° компилятором. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» содСрТит Π² сСбС особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° связСй (ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°) для получСния Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ исполнимого модуля Π»ΠΈΠ±ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π±Π»ΠΎΠΊΠΈ машинного ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ адрСсами ссылок Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… модулях, Π° Ρ‚Π°ΠΊΠΆΠ΅ список своих ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ собираСт ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ модуля Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, вычисляСт ΠΈ заполняСт адрСса пСрСкрСстных ссылок ΠΌΠ΅ΠΆΠ΄Ρƒ модулями. Π’Π°ΠΊΠΆΠ΅ Π² процСссС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ происходит связываниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ со статичСскими ΠΈ динамичСскими Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ (ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ Π°Ρ€Ρ…ΠΈΠ²Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²).

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»» Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… словарях:

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ β€” (Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π°Π½Π³Π». object file) Ρ„Π°ΠΉΠ» с ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ прСдставлСниСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ модуля ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ исходного ΠΊΠΎΠ΄Π° компилятором. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» содСрТит Π² сСбС особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (часто … ВикипСдия

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Π‘ΠΈ β€” Objective C Класс языка: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ: рСфлСксивно ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Появился Π²: 1986 Π³. Автор(Ρ‹): Випизация Π΄Π°Π½Π½Ρ‹Ρ…: строгая полиморфная, статичСская ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: Apple gcc Π˜ΡΠΏΡ‹Ρ‚Π°Π» … ВикипСдия

Бписок Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°/A β€” / * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ, прСдставлСнный список Π½Π΅ являСтся ΠΏΠΎΠ»Π½Ρ‹ΠΌ … ВикипСдия

ΠœΠ΅Ρ‚Π°ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ компилятор β€” Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ прСдлагаСтся ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ. ПояснСниС ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ обсуТдСниС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π½Π° страницС ВикипСдия:К ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ/25 июня 2012. Пока процСсс обсуТдСния … ВикипСдия

DICOM β€” (Π°Π½Π³Π». Digital Imaging and Communications in Medicine) отраслСвой стандарт создания, хранСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ мСдицинских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² обслСдованных ΠΏΠ°Ρ†ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ 1 DICOM Standard 2 DICOM File 3 DICOM… … ВикипСдия

D (язык программирования) β€” Π£ этого Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния, см. D. D Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ°: ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅Π½Π½Ρ‹ΠΉ: ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅, ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π’ΠΈΠΏ исполнСния: компилятор Появился Π²: 1999 Автор(Ρ‹) … ВикипСдия

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ β€” Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с языка высокого уровня Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ компиляции являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ внСшними ссылками для ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅: Врансляторы Ѐинансовый ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π€ΠΈΠ½Π°ΠΌ … Ѐинансовый ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ

ДизассСмблСр β€” транслятор, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС ассСмблСра. По Ρ€Π΅ΠΆΠΈΠΌΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ дСлятся Π½Π° АвтоматичСскиС Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ автоматичСских дизассСмблСров ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒβ€¦ … ВикипСдия

Π‘Π»ΠΎΠ± β€” О Ρ‚ΠΈΠΏΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π‘Π” см. BLOB. Π‘Π»ΠΎΠ± (ΠΎΡ‚ Π°Π½Π³Π». binary linked object ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Π΅Π· ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ доступных исходных ΠΊΠΎΠ΄ΠΎΠ², Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΉ Π² ядро ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ этот Ρ‚Π΅Ρ€ΠΌΠΈΠ½ примСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ по… … ВикипСдия

Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ядра β€” (loadable kernel module, LKM) Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», содСрТащий ΠΊΠΎΠ΄, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ возмоТности ядра ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. ΠœΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ оборудования ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм ΠΈΠ»ΠΈ для добавлСния… … ВикипСдия

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Go: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ рСлокация

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ вСрсиСй Go 1.14.

РСлокация β€” это этап процСсса Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ символу ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ адрСса. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ понятия, Π³Π΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² находятся фактичСски. НачнСм с Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ потрСбуСтся рСлокация.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

ΠŸΡ€ΠΈ построСнии этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ компилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ скомпилируСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Π£ нас Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ компилятором ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

Π€Π»Π°Π³ -l ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСдотвращСния ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΠ½Π³Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π½Π°ΠΌ Π·Π°Π΄Π°Ρ‡Ρƒ.

Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ассСмблСрный ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ инструкция для Π²Ρ‹Π·ΠΎΠ²Π° Println располоТСна со смСщСниСм (offset) 88 Π±Π°ΠΉΡ‚ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main. Π­Ρ‚ΠΎ смСщСниС Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈΠ½ΠΊΠ΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π΅Π»ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ДизассСмблируйтС сгСнСрированный main.o с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ go tool objdump main.o :

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ R_CALL ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ Π²Ρ‹Π·ΠΎΠ²Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ go tool nm вмСсто Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ nm . Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» (.o), созданный Go, ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

ДокумСнтация ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ Π΅Π³ΠΎ содСрТимоС ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, object file) состоит ΠΈΠ· зависимостСй, ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (DWARF), списка проиндСксированных символов, Ρ€Π°Π·Π΄Π΅Π»Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, списка символов, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ. Π’ΠΎΡ‚ Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ символ начинаСтся с Π±Π°ΠΉΡ‚Π° fe Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ наш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» main.o с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ xxd Π½Π° Mac. Π’ΠΎΡ‚ Ρ‡Π°ΡΡ‚ΡŒ содСрТимого с Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ символами:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ 0102 00dc 0100 dc01 0a ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΎΡ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ: Ρ‚ΠΈΠΏ (type), Ρ„Π»Π°Π³ (flag), Ρ€Π°Π·ΠΌΠ΅Ρ€ (size), Π΄Π°Π½Π½Ρ‹Π΅ (data), ΠΈ количСство Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ.

Π‘Π°ΠΉΡ‚Ρ‹ хранятся Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ zigzag (Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ varint). zigzag ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ младший Π±ΠΈΡ‚ для Π·Π½Π°ΠΊΠ°, дСлая ΠΈΡ… мСньшС ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, рСлокация Println прСдставляСт собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ² b201 0810 0008 :

Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для выполнСния Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ ΠΈ создания исполняСмого Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ°.

РСлокация

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… курса Β«Golang Developer. ProfessionalΒ». ВсСх ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ Β«Concurrency patternsΒ». Π’ Ρ…ΠΎΠ΄Π΅ занятия Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π΅Π΅ ΠΎ конкурСнтности Π² Go.А послС Π²Ρ‹ смоТСтС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ concurrency-ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² C?

Π― Ρ‡ΠΈΡ‚Π°ΡŽ ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Π² C, Π½ΠΎ я Π΅Ρ‰Π΅ Π½Π΅ нашСл объяснСния ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π’ Ρ‡Π΅ΠΌ Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ скомпилированным Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ?
Π― Π±Ρ‹Π» Π±Ρ‹ Ρ€Π°Π΄, Ссли Π±Ρ‹ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ объяснил Π½Π° чСловСчСском языкС.

5 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²

ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» являСтся Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· Ρ„Π°Π·Ρ‹ компиляции. Π­Ρ‚ΠΎ Π² основном ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½ΠΎ Π΅ΡΡ‚ΡŒ информация, которая позволяСт ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ символы Π² Π½Π΅ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ символы, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹. (Для справки, «ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹» Π² основном ΠΈΠΌΠ΅Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ‚. Π΄.)

ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»-это сам скомпилированный Ρ„Π°ΠΉΠ». ΠœΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹.

исполняСмый Ρ„Π°ΠΉΠ» формируСтся ΠΏΡƒΡ‚Π΅ΠΌ связывания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» содСрТит инструкции Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ поняты процСссором. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ называСтся ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

этот Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ являСтся Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌ прСдставлСниСм инструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСпосрСдствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ язык ассСмблСра, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄ языка ассСмблСра (прСдставлСнный Π½Π° английском языкС) Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ язык (прСдставлСнный Π½Π° Hex) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ассСмблСра.

Π²ΠΎΡ‚ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ высокого уровня для этого процСсса для ΠΊΠΎΠ΄Π° Π½Π° языкС высокого уровня, Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠ°ΠΊ C

—> ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· pre-processor

—> Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, всС Π΅Ρ‰Π΅ Π² C

—> ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· компилятор

—> для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π°Π³Ρ€Π΅Π³Π°Ρ‚ ΠΊΠΎΠ΄

—> ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ассСмблСр

—> Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° машинном языкС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…

—> ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Linker

—> Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ».

этот ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов ΠΌΠΎΠ³ΡƒΡ‚ нСпосрСдствСнно Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ машинного языка, Π½Π΅ проходя Ρ‡Π΅Ρ€Π΅Π· ассСмблСр. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ для вас. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, приятно Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π»ΡƒΡ‡ΡˆΠ΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Π΅ΡΡ‚ΡŒ 3 Π²ΠΈΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

содСрТит ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² Ρ„ΠΎΡ€ΠΌΠ΅, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объСдинСна с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π²ΠΎ врСмя ссылки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исполняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ динамичСски Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ»ΠΈ Π²ΠΎ врСмя выполнСния. ΠžΠ±Ρ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ-это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π°.

исполняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„Π°ΠΉΠ»Ρ‹

ΠΎΠ½ΠΈ содСрТат ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСпосрСдствСнно Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ (Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠΌ, e.G execve) ΠΈ впослСдствии Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½.

бонус:

1: Π½Π° самом Π΄Π΅Π»Π΅ это collect2, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ Π½Π°Π΄ ld.

ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»-это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈ компиляции ΠΎΠ΄Π½ΠΎΠ³ΠΎ (ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…) исходных Ρ„Π°ΠΉΠ»ΠΎΠ².

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ», Π»ΠΈΠ±ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТат собствСнный ΠΊΠΎΠ΄, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ символы ΠΈ Ρ‚. Π΄.

ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-это ΠΊΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, символов, тСкста для запуска ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΊΠ°ΠΊ старый тСлСкс машин ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈ teletyping ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ сигналы Π΄Ρ€ΡƒΠ³ΠΈΠΌ тСлСкс машина. Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ процСссор Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для запуска ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½ΠΎ Π½Π΅ связан. БвязываниС создаСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ компилятор языка Π‘ΠΈ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ exe-Ρ„Π°ΠΉΠ», ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» связан с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ компилятором, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ c язык, ΠΈΠ»ΠΈ vb etc.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Руководство Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° ΠΏΠΎ эксплуатации ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°

ЦСль Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ β€” ΠΏΠΎΠΌΠΎΡ‡ΡŒ C ΠΈ C++ программистам ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅ΠΌ занимаСтся ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ. Π—Π° послСдниС нСсколько Π»Π΅Ρ‚ я объяснил это Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ количСству ΠΊΠΎΠ»Π»Π΅Π³ ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ† Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ настало врСмя пСрСнСсти этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π½Π° Π±ΡƒΠΌΠ°Π³Ρƒ, Ρ‡Ρ‚ΠΎΠ± ΠΎΠ½ стал Π±ΠΎΠ»Π΅Π΅ доступным (ΠΈ Ρ‡Ρ‚ΠΎΠ± ΠΌΠ½Π΅ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ Π΅Π³ΠΎ снова). [ОбновлСниС Π² ΠΌΠ°Ρ€Ρ‚Π΅ 2009: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΎΠ± особСнностях ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π² Windows, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ расписано ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ опрСдСлСния (one-definition rule).

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠΎ ΠΌΠ½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ, слуТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ошибка ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ:

Если Π’Π°ΡˆΠ° рСакция β€” ‘навСрняка Π·Π°Π±Ρ‹Π» extern Β«CΒ»’, Ρ‚ΠΎ Π’Ρ‹ скорСС всСго Π·Π½Π°Π΅Ρ‚Π΅ всё, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ: Ρ‡Ρ‚ΠΎ находится Π² C Ρ„Π°ΠΉΠ»Π΅?

Π­Ρ‚Π° Π³Π»Π°Π²Π° β€” ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… C Ρ„Π°ΠΉΠ»Π°. Если всё Π² листингС, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅, ΠΈΠΌΠ΅Π΅Ρ‚ для Вас смысл, Ρ‚ΠΎ скорСС всСго Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ эту Π³Π»Π°Π²Ρƒ ΠΈ сразу ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ.

Для Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° пСрСмСнная ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Ρ‚.Π΅. Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ пространство, ΠΎΡ‚Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² памяти, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

ΠŸΠΎΠ΄Ρ‹Ρ‚ΠΎΠΆΠΈΠΌ:

ΠšΠΎΠ΄Π”Π°Π½Π½Ρ‹Π΅
Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅Π”ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠ΅
Π˜Π½ΠΈΡ†ΠΈΠ°-
Π»ΠΈΠ·ΠΈΡ€ΠΎ-
Π²Π°Π½Π½Ρ‹Π΅
НСинициа-
Π»ΠΈΠ·ΠΈΡ€ΠΎ-
Π²Π°Π½Π½Ρ‹Π΅
Π˜Π½ΠΈΡ†ΠΈΠ°-
Π»ΠΈΠ·ΠΈΡ€ΠΎ-
Π²Π°Π½Π½Ρ‹Π΅
НСинициа-
Π»ΠΈΠ·ΠΈΡ€ΠΎ-
Π²Π°Π½Π½Ρ‹Π΅
Объяв-
Π»Π΅Π½ΠΈΠ΅
int fn(int x);extern int x;extern int x;N/AN/AN/A
ΠžΠΏΡ€Π΅Π΄Π΅-
Π»Π΅Π½ΠΈΠ΅
int fn(int x)

int x = 1;
(ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия
β€” Ρ„Π°ΠΉΠ»)
int x;
(ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия β€” Ρ„Π°ΠΉΠ»)
int x = 1;
(ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия β€” функция)
int x;
(ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия β€” функция)
int* p = malloc(sizeof(int));

ВСроятно Π±ΠΎΠ»Π΅Π΅ Π»Ρ‘Π³ΠΊΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΡƒΡΠ²ΠΎΠΈΡ‚ΡŒ β€” это просто ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ C компилятор

Π“Π΄Π΅ Π±Ρ‹ ΠΊΠΎΠ΄ Π½ΠΈ ссылался Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, компилятор допускаСт это, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ Π²ΠΈΠ΄Π΅Π» Ρ€Π°Π½ΡŒΡˆΠ΅ объявлСниС этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ОбъявлСниС β€” это ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сущСствуСт Π³Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π Π°Π±ΠΎΡ‚Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ эти обСщания. Однако, Ρ‡Ρ‚ΠΎ компилятор Π΄Π΅Π»Π°Π΅Ρ‚ со всСми этими обСщаниями, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»?

По сущСству компилятор оставляСт пустыС мСста. ΠŸΡƒΡΡ‚ΠΎΠ΅ мСсто (ссылка) ΠΈΠΌΠ΅Π΅Ρ‚ имя, Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ этому ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ извСстно.

Учитывая это, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

АнализированиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ nm для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ· нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅:

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ: Ρ‡Π°ΡΡ‚ΡŒ 1

Π Π°Π½Π΅Π΅ ΠΌΡ‹ обмолвились, Ρ‡Ρ‚ΠΎ объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€” это ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ компилятору, Ρ‡Ρ‚ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² осущСствлСнии этого обСщания. Глядя Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ этот процСсс, ΠΊΠ°ΠΊ Β«Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ пустых мСст».

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, рассматривая Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ C Ρ„Π°ΠΉΠ» Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Π²Ρ‹ΡˆΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· ΠΎΠ±ΠΎΠΈΡ… Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ соСдинСны (Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π²Ρ‹Π΄Π°Π» Π±Ρ‹ сообщСниС ΠΎΠ± ошибкС). КаТдая Π²Π΅Ρ‰ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ своё мСсто, ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ мСсто ΠΈΠΌΠ΅Π΅Ρ‚ свою Π²Π΅Ρ‰ΡŒ. Π’Π°ΠΊΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всС пустыС мСста ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ здСсь (Π½Π° систСмах UNIX процСсс ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ вызываСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ld ).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ nm для исслСдования ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π°.

Он содСрТит символы ΠΎΠ±ΠΎΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ всС Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ссылки исчСзли. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ пСрСупорядочСны Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ находятся вмСстС. А Ρ‚Π°ΠΊΠΆΠ΅ сущСствуСт Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ОБ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с Ρ‚Π°ΠΊΠΎΠΉ ΡˆΡ‚ΡƒΠΊΠΎΠΉ, ΠΊΠ°ΠΊ исполняСмый Ρ„Π°ΠΉΠ».

БущСствуСт достаточноС количСство слоТных Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄, Π½ΠΎ Ссли Π²Ρ‹ Π²Ρ‹ΠΊΠΈΠ½Π΅Ρ‚Π΅ всё, Ρ‡Ρ‚ΠΎ начинаСтся с подчёркивания, Ρ‚ΠΎ станСт Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ символы

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ Π±Ρ‹Π»ΠΎ упомянуто, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ сообщСниС ΠΎΠ± ошибкС, Ссли Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ для символа, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΉΠ΄Π΅Π½Π° ссылка. А Ρ‡Ρ‚ΠΎ случится, Ссли Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π΄Π²Π° опрСдСлСния для символа Π²ΠΎ врСмя ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ?

Π’ C++ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ прямолинСйноС. Π―Π·Ρ‹ΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, извСстноС ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ опрСдСлСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ гласит, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа, Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Π²ΠΎ врСмя ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, Π½ΠΈ большС, Π½ΠΈ мСньшС. (Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²ΠΎΠΉ стандарта C++ являСтся 3.2, которая Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассмотрим нСсколько ΠΏΠΎΠ·ΠΆΠ΅.)

Для C ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ‰Π΅ΠΉ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ. Π”ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ для любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π―Π·Ρ‹ΠΊ C Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ (ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚) Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ исходным Ρ„Π°ΠΉΠ»Π°ΠΌ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Однако, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ обходится Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками ΠΊΡ€ΠΎΠΌΠ΅ C ΠΈ C++, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ опрСдСлСния Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ. НапримСр, для Fortran’Π° являСтся Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ копию ΠΊΠ°ΠΆΠ΄ΠΎΠΉ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° Π½Π΅Ρ‘ ссылаСтся. ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ³Π΄Π° ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹, Π²Ρ‹Π±Ρ€Π°Π² ΠΎΠ΄Π½Ρƒ копию (самого большого прСдставитСля, Ссли ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅) ΠΈ Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅. Π­Ρ‚Π° модСль ΠΈΠ½ΠΎΠ³Π΄Π° называСтся Β«ΠΎΠ±Ρ‰Π΅ΠΉ модСлью» ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΈΠ·-Π·Π° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова COMMON (ΠΎΠ±Ρ‰ΠΈΠΉ) языка Fortran.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ опСрационная систСма

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

Запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ разумССтся Π²Π»Π΅Ρ‡Ρ‘Ρ‚ Π·Π° собой Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ машинного ΠΊΠΎΠ΄Π°, Ρ‚.Π΅. ОБ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° пСрСнСсти ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ исполняСмого Ρ„Π°ΠΉΠ»Π° с Тёстокого диска Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΎΡ‚ΠΊΡƒΠ΄Π° CPU смоТСт Π΅Π³ΠΎ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ. Π­Ρ‚ΠΈ ΠΏΠΎΡ€Ρ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ сСгмСнтом ΠΊΠΎΠ΄Π° (code segment ΠΈΠ»ΠΈ text segment).

Код Π±Π΅Π· Π΄Π°Π½Π½Ρ‹Ρ… сам ΠΏΠΎ сСбС бСсполСзСн. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ всСм Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ мСсто Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Однако, сущСствуСт Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ стартовыС значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΈ исполняСмом Ρ„Π°ΠΉΠ»Π°Ρ…. Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° запускаСтся Π½Π° старт, ОБ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ эти значСния Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ пространство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ….

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

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Как Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π΄ΠΎ сих ΠΏΠΎΡ€ Π²ΠΎ всСх рассуТдСниях ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ΅ Ρ€Π΅Ρ‡ΡŒ Π·Π°Ρ…ΠΎΠ΄ΠΈΠ»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…; ΠΏΡ€ΠΈ этом ΠΌΡ‹ Π½Π΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈΡΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ динамичСски занимаСмая ΠΏΠ°ΠΌΡΡ‚ΡŒ, упомянутыС Ρ€Π°Π½ΡŒΡˆΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ; Ρ‡Π°ΡΡ‚ΡŒ 2

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ‹ рассмотрСли основы основ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² описаниС Π±ΠΎΠ»Π΅Π΅ слоТных Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² Ρ‚ΠΎΠΌ хронологичСском порядкС, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ.

Π“Π»Π°Π²Π½ΠΎΠ΅ наблюдСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: Ссли ряд Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π²Π΅Ρ‰ΠΈ (Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² с Тёсткого диска ΠΈ Ρ‚.Π΄.), Ρ‚ΠΎΠ³Π΄Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΎΠ±ΠΎΡΠΎΠ±ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ мСстС ΠΈ Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Одним ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π±Ρ‹Π»ΠΎ Π±Ρ‹ использованиС ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всю ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽβ€¦ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ Π»Π΅Π³ΠΊΠΎ доступном мСстС: Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

ВСхничСскоС отступлСниС: Π­Ρ‚Π° Π³Π»Π°Π²Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ опускаСт Π²Π°ΠΆΠ½ΠΎΠ΅ свойство ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°: пСрСадрСсация (relocation). Π Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, Ρ‚.Π΅. Ссли раздСляСмая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° отобраТаСтся Π² адрСсноС пространство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ адрСса. Π­Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… мСстах. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли всС обращСния ΠΊ адрСсам ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (Β«Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ +1020 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ΡΡŽΠ΄Π°Β») Π½Π΅ΠΆΠ΅Π»ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ (Β«Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² 0x102218BFΒ»), Ρ‚ΠΎ это Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π°ΠΊ Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ всСгда. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях всСм Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ адрСсам Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΡ‚ΡŒ подходящий офсСт β€” это ΠΈ Π΅ΡΡ‚ΡŒ relocation. Π― Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ возвращаСтся ΠΊ этой Ρ‚Π΅ΠΌΠ΅ снова, ΠΎΠ΄Π½Π°ΠΊΠΎ добавлю, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это практичСски всСгда скрыто ΠΎΡ‚ C/C++ программиста β€” ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹ трудностями пСрСадрСсации.

БтатичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

Π‘Π°ΠΌΠΎΠ΅ простоС Π²ΠΎΠΏΠ»ΠΎΡ‰Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ β€” это статичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ Π±Ρ‹Π»ΠΎ упомянуто, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ (share), ΠΊΠΎΠ΄ просто ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹; это ΠΈ Π΅ΡΡ‚ΡŒ ΡΡƒΡ‚ΡŒ статичных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

По ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ… вмСстС, ΠΎΠ½ Π²Π΅Π΄Ρ‘Ρ‚ список символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всС явно ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹, Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ мСсто для поиска символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π² спискС β€” Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Если Π½Π΅Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ символ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ добавляСтся, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» Π±Ρ‹ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° продолТаСтся.

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

Другая ваТная Π΄Π΅Ρ‚Π°Π»ΡŒ β€” это порядок событий; Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, ΠΈ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² порядкС слСва Π½Π° ΠΏΡ€Π°Π²ΠΎ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΡ‹ΠΉ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² послСднюю ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ символа ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, стоящСй Ρ€Π°Π½ΡŒΡˆΠ΅ Π² строкС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ Π΅Π³ΠΎ автоматичСски.

(ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ libx.a ΠΈ liby.a ; ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΏΠ»ΠΎΡ…ΠΎ особСнно ΠΏΠΎΠ΄ Windows)

ДинамичСскиС раздСляСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

Всё это сводится ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ссли ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ символа находится Π² раздСляСмой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ». ВмСсто этого ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ записываСт имя символа ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΎΡ‚ΠΊΡƒΠ΄Π° этот символ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ появится.

БущСствуСт Π΄Ρ€ΡƒΠ³ΠΎΠ΅ большоС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ динамичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со статичСскими ΠΈ это проявляСтся Π² гранулярности ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. Если ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ символ бСрётся ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ динамичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (скаТСм printf ΠΈΠ· libc.so ), Ρ‚ΠΎ всё содСрТимоС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ помСщаСтся Π² адрСсноС пространство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ основноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ статичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π³Π΄Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, относящиСся ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ символу.

Windows DLL

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ ΠΊΠ°ΠΊ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Unix, Ρ‚Π°ΠΊ ΠΈ Π½Π° Windows, всё ΠΆΠ΅ Π΅ΡΡ‚ΡŒ нСсколько Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π»ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ.

ЭкспортируСмыС символы

Π‘Π°ΠΌΠΎΠ΅ большоС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Windows символы Π½Π΅ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ автоматичСски. Π’ Unix всС символы всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ΄Π»ΠΈΠ½ΠΊΠΎΠ²Π°Π½Ρ‹ ΠΊ раздСляСмой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Π²ΠΈΠ΄Π½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ Windows, программист Π΄ΠΎΠ»ΠΆΠ΅Π½ явно Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ символы Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ, Ρ‚.Π΅. ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ….

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ этой мСшанинС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ C++, пСрвая ΠΈΠ· этих ΠΎΠΏΡ†ΠΈΠΉ становится самой простой, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² этом случаС компилятор Π±Π΅Ρ€Ρ‘Ρ‚ Π½Π° сСбя ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠΌΡ‘Π½

.LIB ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ относящиСся ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Ρ„Π°ΠΉΠ»Ρ‹

Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ символы

ВмСстС с Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊ DLL явно ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ экспортируСмыС символы, Windows Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, явно ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ символы, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ Π΄Π°Ρ‘Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎ скорости, Π²Ρ‹Π·Π²Π°Π½Π½ΡƒΡŽ историчСскими свойствами 16-Ρ‚ΠΈ Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΎΠΊΠΎΠ½.

ΠŸΡ€ΠΈ этом ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄Π½ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Ρ‚ΠΎΠ½ΠΎΠΌ программирования Π½Π° C. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ рСбусу: ΠΊΠΎΠ΄ Π² DLL, содСрТащий ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ/ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ символ, Π½ΠΎ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ DLL, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ символ.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· этой ситуации β€” это использованиС макросов прСпроцСссора.

Π€Π°ΠΉΠ» с исходниками Π² DLL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрСмСнная прСпроцСссора EXPORTING_XYZ_DLL_SYMS ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° (ΠΏΠΎ срСдством #define ) Π΄ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ экспортируСт символ. Π›ΡŽΠ±ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ этот Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ опрСдСляСт этот символ ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ.

ЦикличСскиС зависимости

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ, связанной с использованиСм DLL, являСтся Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Windows относится строТС ΠΊ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½ Π²ΠΎ врСмя ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. Π’ Unix Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, которая содСрТит Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅ символы, Ρ‚.Π΅. символы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Π²Π΅Π΄ΠΎΠΌΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ Π’ этой ситуации любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ эту Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π·Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… символов, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°. Windows Π½Π΅ допускаСт Ρ‚Π°ΠΊΠΎΠΉ распущСнности.

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° систСм β€” это Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. ВыполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ зависят ΠΎΡ‚ высокоуровСвых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, высокоуровнСвыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ зависят ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, ΠΈ всё компонуСтся Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС β€” сначала Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, ΠΏΠΎΡ‚ΠΎΠΌ высокого, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈ выполняСмый Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ зависит ΠΎΡ‚ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…

C++ для дополнСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹

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

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΡ‘Π½

РСшСниС ΠΊ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Π½Π°Π·Π²Π°Π½ΠΎ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΡ‘Π½ (name mangling), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ вся информация ΠΎ сигнатурС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСводится (to mangle = ΠΈΡΠΊΠ°ΠΆΠ°Ρ‚ΡŒ, Π΄Π΅Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈΠΌ.ΠΏΠ΅Ρ€.) Π² Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, которая становится собствСнно ΠΈΠΌΠ΅Π½Π΅ΠΌ символа с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сигнатуры пСрСводятся Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠΌΡ‘Π½ Ρ€Π΅ΡˆΠ΅Π½Π°.

Π― Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ Π²Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… схСм дСкорирования (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅), Π½ΠΎ Π±Π΅Π³Π»Ρ‹ΠΉ взгляд Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄Ρƒ Π²Ρ‹ΡˆΠ΅, даст идСю, ΠΊΠ°ΠΊ всё это ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ (Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, nm β€” Π’Π°Ρˆ Π΄Ρ€ΡƒΠ³!):

ΠžΠ±Π»Π°ΡΡ‚ΡŒ, Π³Π΄Π΅ схСмы дСкорирования Ρ‡Π°Ρ‰Π΅ всСго Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ, находится Π² мСстС пСрСплСтСния C ΠΈ C++. ВсС символы, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ C++ компилятором, Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹; всС символы, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ C компилятором, выглядят Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² исходном ΠΊΠΎΠ΄Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это, язык C++ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ extern «C» Π²ΠΎΠΊΡ€ΡƒΠ³ объявлСния ΠΈ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. По сути этим ΠΌΡ‹ сообщаСм C++ компилятору, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ имя Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ β€” Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ C++ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ΄ΠΎΠΌ C, Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ C Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ΄ΠΎΠΌ C++.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π² самом Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ сущСствуСт достаточно большая Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π·Π°Π±Ρ‹Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ extern «C» ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ C ΠΈ C++ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠšΡΡ‚Π°Ρ‚ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ объявлСниС extern «C» игнорируСтся для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ² классов (Β§7.5.4 стандарта Π‘++)

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ статичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ выходящСС Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π‘ свойство C++, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, β€” это сущСствованиС конструкторов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ β€” это кусок ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Ρ‘Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. По сути Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ эквивалСнтна ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ с Ρ‚ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ… ΠΊΠΎΠ΄Π°.

Вспомним ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π³Π»Π°Π²Ρ‹, Ρ‡Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ своё сущСствованиС ΡƒΠΆΠ΅ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’ C конструкция Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния Ρ‚Π°ΠΊΠΎΠΉ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€” Π΄Π΅Π»ΠΎ простоС: ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ просто копируСтся ΠΈΠ· сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… выполняСмого Ρ„Π°ΠΉΠ»Π° Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ мСсто Π² памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая Π²ΠΎΡ‚-Π²ΠΎΡ‚-Π½Π°Ρ‡Π½Ρ‘Ρ‚-Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ.

Π’ C++ процСсс ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС, Ρ‡Π΅ΠΌ просто ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ фиксированных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ; вСсь ΠΊΠΎΠ΄ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… конструкторах ΠΏΠΎ всСй ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ сама ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° фактичСски Π½Π°Ρ‡Π½Ρ‘Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ.

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

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ конструкторы Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ β€” ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ находится Π²ΠΎ власти Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ. (Π‘ΠΌ. Β«Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ C++Β» Π‘ΠΊΠΎΡ‚Ρ‚Π° ΠœΠ°ΠΉΠ΅Ρ€ΡΠ° для Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ β€” Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ° 47 Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ, Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ° 4 Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ)

Для этого ΠΊΠΎΠ΄Π° (Π½Π΅Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ) Π²Ρ‹Π²ΠΎΠ΄ nm выглядит Ρ‚Π°ΠΊ:

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ здСсь ΠΊΡƒΡ‡Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ, Π½ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсна для нас это записи с классом W (Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «слабый» символ (Β«weakΒ» symbol)) Π° Ρ‚Π°ΠΊΠΆΠ΅ записи ΠΈΠΌΠ΅Π½Π΅ΠΌ сСкции Ρ‚ΠΈΠΏΠ° «.gnu.linkonce.t.stuff«. Π­Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ для конструкторов Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅ Β«NameΒ» ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ собствСнно ΠΈ ΠΌΠΎΠ³Π»ΠΈ Ρ‚Π°ΠΌ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… конструкторов задСйствованы.

Π¨Π°Π±Π»ΠΎΠ½Ρ‹

C++ Π²Π²ΠΎΠ΄ΠΈΡ‚ понятия шаблона (templates), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅, сразу для всСх случаСв. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» max_template.h с Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ max :

ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ этот Ρ„Π°ΠΉΠ» Π² исходный Ρ„Π°ΠΉΠ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

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

Как ΠΆΠ΅ это дСлаСтся? ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΏΡƒΡ‚ΠΈ дСйствия: Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΡ€Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ инстанций Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π½ΠΈΠ΅ инстанциирования Π΄ΠΎ стадии ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ (я ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽ эти ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Sun).

Бпособ прорСТивания ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ инстанций ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» содСрТит ΠΊΠΎΠ΄ всСх ΠΏΠΎΠ²ΡΡ‚Ρ€Π΅Ρ‡Π°Π²ΡˆΠΈΡ…ΡΡ шаблонов. НапримСр, для ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ Ρ„Π°ΠΉΠ»Π°, содСрТимоС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° выглядит Ρ‚Π°ΠΊ:

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

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Solaris C++) β€” это Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ опрСдСлСния Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅, Π° ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ символы. Когда Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ стадии ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ собствСнно относятся ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌ инстанциям, ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ….

Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎ Ρ€Π΅Π΄ΡƒΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ минус этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° проявляСтся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π³Π΄Π΅ исходной ΠΊΠΎΠ΄ находится ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ C++ компилятор Π²ΠΎ врСмя ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ (Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ вСсь процСсс)

ДинамичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

ПослСдняя ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ здСсь обсудим, β€” это динамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ использованиС раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° собствСнно запускаСтся. Π’ соврСмСнных ОБ это Π΄Π°ΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… стадиях.

Π­Ρ‚ΠΎ осущСствляСтся ΠΏΠ°Ρ€ΠΎΠΉ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² dlopen ΠΈ dlsym (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹Π΅ эквивалСнты Π² Windows соотвСтствСнно Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ LoadLibrary ΠΈ GetProcAddress ). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π΅Ρ€Ρ‘Ρ‚ имя раздСляСмой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π΄ΠΎΠ³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΅Ρ‘ Π² адрСсноС пространство Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ процСсса. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅ символы, поэтому Π²Ρ‹Π·ΠΎΠ² dlopen ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»Π΅Ρ‡ΡŒ Π·Π° собой ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΡƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

dlopen ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π° Π²Ρ‹Π±ΠΎΡ€ Π»ΠΈΠ±ΠΎ Π»ΠΈΠΊΠ²ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½ΠΎΡΡ‚ΠΈ сразу, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π°, ( RTLD_NOW ) Π»ΠΈΠ±ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ символы ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости ( RTLD_LAZY ). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² dlopen ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ достаточно Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ способ Π·Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ риск, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° нСопрСдСлённая ссылка, которая Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° β€” Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°.

ВзаимодСйствиС с C++

ΠŸΡ€ΠΎΡ†Π΅ΡΡ динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ достаточно прямолинССн, Π½ΠΎ ΠΊΠ°ΠΊ ΠΎΠ½ взаимодСйствуСт с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ особСнностями C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° всё ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°?

Π’Π°ΠΊ ΠΊΠ°ΠΊ процСсс дСкорирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ ΠΎΡ‚ компилятора ΠΊ компилятору, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ динамичСски Π½Π°ΠΉΡ‚ΠΈ C++ символ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Π”Π°ΠΆΠ΅ Ссли Π’Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΈΠΌ компилятором ΠΈ ΡƒΠ³Π»ΡƒΠ±Π»ΡΠ΅Ρ‚Π΅ΡΡŒ Π² Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠΈΡ€, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€” ΠΊΡ€ΠΎΠΌΠ΅ простых C-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π΅ΡΡ‚ΡŒ ΠΊΡƒΡ‡Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ (Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅), ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΎΠΆΠ΅ Π½Π°Π΄ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ.

Подводя ΠΈΡ‚ΠΎΠ³ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Π²Ρ‹ΡˆΠ΅, ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π·Π°ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΡƒΡŽ Π² extern «C» Ρ‚ΠΎΡ‡ΠΊΡƒ вхоТдСния, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Π° dlsym ‘ΠΎΠΌ. Π­Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° вхоТдСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° всС инстанции C++ класса, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ доступ ΠΊΠΎ всСм прСлСстям C++.

И Π² Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ динамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° справляСтся ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ с Β«ΠΏΡ€ΠΎΡ€Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ инстанций», Ссли Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎΠ± инстанциировании шаблонов; ΠΈ всё выглядит Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ с Β«ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ инстанциирования», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ «стадия ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈΒ» наступаСт послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° (ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ вСроятно Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ машинС, которая Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ исходники). ΠžΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ компилятора ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ‚Π°ΠΊΠΎΠΉ ситуации.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±Ρ‹Π»ΠΈ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ содСрТимоС написанного ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ 95% повсСднСвных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ программист ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Many thanks to Mike Capp and Ed Wilson for useful suggestions about this page.

Copyright Β© 2004-2005,2009-2010 David Drysdale

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is available here.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *