БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² си: БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ | ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C ΠΈ C++

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

БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² C

На Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ 5 ΠΌΠΈΠ½ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΎΠ² 78 ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ

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

Бинтаксис

Π’ΠΎΡ‚ синтаксис объявлСния статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ на языкС C.

БтатичСский Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ имя-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ;

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 01

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Β«Ctrl + Alt + TΒ» и создайтС Ρ„Π°ΠΉΠ» Ρ‚ΠΈΠΏΠ° C с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Β«nanoΒ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ запрос. Имя Ρ„Π°ΠΉΠ»Π°Β β€” Β«test.cΒ», ΠΈΒ ΠΎΠ½Β Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π²Β GNU Nano Editor.

Π’Ρ‹Β ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ‚ΠΎΡ‚Β ΠΆΠ΅ ΠΊΠΎΠ΄ в свой Ρ„Π°ΠΉΠ» GNU. Код содСрТит ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с имСнСм Β«Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β». ΠœΡ‹Β ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ цСлочислСнного Ρ‚ΠΈΠΏΠ° Β«numΒ» Π²Β Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«valueΒ», ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. Π—Π°Ρ‚Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«numΒ» Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ ΠΈΒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Π²Β ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. В основном ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΡ‹Β ΡƒΠΊΠ°Π·Π°Π»ΠΈ Ρ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«valueΒ» ΠΈΒ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«numΒ», которая Π±Ρ‹Π»Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π°. НаТмитС ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Β«Ctrl + SΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΈΒ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ», Π½Π°ΠΆΠ°Π² Β«Ctrl + XΒ».

Π’Π΅ΠΏΠ΅Ρ€ΡŒ скомпилируйтС ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«gccΒ», ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. Если ошибки Π½Π΅Β Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΊΠΎΠ΄ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ.

ПослС компиляции Ρ„Π°ΠΉΠ»Π° test.c ΠΌΡ‹Β Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ этот Ρ„Π°ΠΉΠ» Ρ‡Π΅Ρ€Π΅Π· запрос Β«a.outΒ» Π½ΠΈΠΆΠ΅ в консоли. Π’Ρ‹Β ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«numΒ» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π΄Π°ΠΆΠ΅ послС Ρ‚Ρ€Π΅Ρ…ΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ связано с тСм, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«numΒ» Π½Π΅Β Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ статичСскоС, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° вызываСтся функция Β«valueΒ», ΠΎΠ½Π° восстанавливаСт исходноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π²Π½ΠΎΠ΅ 0. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 0Β Π΄ΠΎΒ 1 всС Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅.

Обновим ΠΊΠΎΠ΄. Π‘Π½ΠΎΠ²Π° ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» языка C test.c, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ запрос Β«nanoΒ».

Нам просто Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ пСрСмСнная Β«numΒ» статична. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«staticΒ» Π²Β Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«numΒ» ΠΈΒ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚ΠΈΠΏΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ в нашСм случаС являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° основная функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«valueΒ», статичСская пСрСмСнная Β«numΒ» Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Π°Β Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ станСт статичСским. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Β ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, ΠΈΒ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, процСсс Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ сначала скомпилируСм Ρ„Π°ΠΉΠ» C с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ запроса компиляции Β«gccΒ» в консольном Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅.

ПослС выполнСния Ρ„Π°ΠΉΠ»Π° ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкции Β«a.outΒ» Π²Ρ‹Β ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Β«valueΒ» ΠΈΠ·-Π·Π° использования ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Β«staticΒ» ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«numΒ».

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 02

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π°Β Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ‚ΠΎΡ‚Β ΠΆΠ΅ Ρ„Π°ΠΉΠ»Β C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Β Π½Π΅ΠΌ ΠΊΠΎΠ΄.

Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ GNU. Π£ нас Π΅ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с ΠΎΠ΄Π½ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ ΠΈ основной ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ΠΊΠΎΠ΄Π΅. На этот Ρ€Π°Π· Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Β«xΒ» ΠΈ Β«yΒ», соотвСтствСнно, Π² основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ скрипта C. Один ΠΈΠ· Π½ΠΈΡ… β€” автоматичСский, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” статичСский со значСниями Β«-75Β» ΠΈ Β«22Β». Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ использовали Π΄Π²Π΅ строки ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ для Π²Ρ‹Π²ΠΎΠ΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ±Π΅ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π½Π° экран Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ «Ссли» для выполнСния условия. Π’ этом состоянии ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«xΒ» 0. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ€Π°Π²Π½ΠΎ 0, Ρ‚ΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ. Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΎΠ±Ρ‰ΡƒΡŽ сумму ΠΎΠ±Π΅ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Β«xΒ» ΠΈ Β«yΒ» Π² Π½Π΅ΠΌ. ПослС этого основная функция Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚Π°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ скомпилируСм ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄Β C снова Ρ‡Π΅Ρ€Π΅Π· запрос Β«gccΒ» вмСстС с имСнСм Ρ„Π°ΠΉΠ»Π° CΒ Β«test.cΒ», ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ в запросС, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Β«test.cΒ» ΡΒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ старой инструкции Β«a.outΒ», ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ. Π’Ρ‹Π²ΠΎΠ΄ на экранС вашСго Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π²Π°ΠΌ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Β ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… строках. ПослС этого Π²Β Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ строкС отобразится сумма ΠΎΠ±Π΅ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹Β Π½Π°Π΄Π΅Π΅ΠΌΡΡ, Ρ‡Ρ‚ΠΎ эта ΡΡ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎΠΉ для понимания ΠΈΒ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ идСю статичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… в языкС C Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму Linux.

c++ β€” БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² C ++

Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, ΠΊΠΎΠ³Π΄Π° я ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽ Π½Π° ваши вопросы Π½Π΅ ΠΏΠΎ порядку, это ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Когда статичСская пСрСмСнная объявлСна ​​в Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Π΅Π΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ограничиваСтся Ρ„Π°ΠΉΠ»ΠΎΠΌ .h ΠΈΠ»ΠΈ для всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

НСт Ρ‚Π°ΠΊΠΎΠΉ Π²Π΅Ρ‰ΠΈ ΠΊΠ°ΠΊ «ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°». Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² исходныС Ρ„Π°ΠΉΠ»Ρ‹. Π•Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° являСтся исходный Ρ„Π°ΠΉΠ» , Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ тСкст ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². ВсС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, копируСтся Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ исходный Ρ„Π°ΠΉΠ».

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

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ static Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ связь, каТдая Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° #includeing вашСго Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ свою ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ, ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ (которая Π½Π΅ Π²ΠΈΠ΄Π½Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ вашСй Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ статичСскими ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² классС.

Π’ объявлСнии класса static ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС экзСмпляры класса Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-Ρ‡Π»Π΅Π½; Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сотни ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого Ρ‚ΠΈΠΏΠ°, Π½ΠΎ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ссылаСтся Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ static (ΠΈΠ»ΠΈ «class»), это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом ΠΊΠ°ΠΊ ΠΎ «Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌ классС».

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ статичСская пСрСмСнная инициализируСтся Π² Ρ„Π°ΠΉΠ»Π΅ .cpp ΠΏΡ€ΠΈ объявлСнии Π² классС, Π²Π΅Ρ€Π½ΠΎ?

Π”Π°, ΠΎΠ΄Π½Π° (ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° ) Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ класс пСрСмСнная.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° двумя Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ компиляции?

Как я сказал:

  • Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π½Π΅ являСтся ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ компиляции,
  • static ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ Π² зависимости ΠΎΡ‚ контСкста.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠ΅ static ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°. Класс static ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ для всСх экзСмпляров.

НадСюсь, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.

PS: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ послСдний Π°Π±Π·Π°Ρ† ΠΎΡ‚Π²Π΅Ρ‚Π° Chubsdad ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ static Π² C++ для обозначСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ связи, Π½ΠΎ для Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… пространств ΠΈΠΌΠ΅Π½. (ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€Π°Π². ;-))

Π“Π΄Π΅ хранятся статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² C ΠΈ C ++?

Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» это с objdump ΠΈ gdb, Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ:

 (gdb) disas fooTest
Dump of assembler code for function fooTest:
   0x000000000040052d <+0>: push   %rbp
   0x000000000040052e <+1>: mov    %rsp,%rbp
   0x0000000000400531 <+4>: mov    0x200b09(%rip),%eax        # 0x601040 <foo>
   0x0000000000400537 <+10>:    add    $0x1,%eax
   0x000000000040053a <+13>:    mov    %eax,0x200b00(%rip)        # 0x601040 <foo>
   0x0000000000400540 <+19>:    mov    0x200afe(%rip),%eax        # 0x601044 <bar.2180>
   0x0000000000400546 <+25>:    add    $0x1,%eax
   0x0000000000400549 <+28>:    mov    %eax,0x200af5(%rip)        # 0x601044 <bar.2180>
   0x000000000040054f <+34>:    mov    0x200aef(%rip),%edx        # 0x601044 <bar.2180>
   0x0000000000400555 <+40>:    mov    0x200ae5(%rip),%eax        # 0x601040 <foo>
   0x000000000040055b <+46>:    mov    %eax,%esi
   0x000000000040055d <+48>:    mov    $0x400654,%edi
   0x0000000000400562 <+53>:    mov    $0x0,%eax
   0x0000000000400567 <+58>:    callq  0x400410 <printf@plt>
   0x000000000040056c <+63>:    pop    %rbp
   0x000000000040056d <+64>:    retq   
End of assembler dump.

(gdb) disas barTest
Dump of assembler code for function barTest:
   0x000000000040056e <+0>: push   %rbp
   0x000000000040056f <+1>: mov    %rsp,%rbp
   0x0000000000400572 <+4>: mov    0x200ad0(%rip),%eax        # 0x601048 <foo>
   0x0000000000400578 <+10>:    add    $0x1,%eax
   0x000000000040057b <+13>:    mov    %eax,0x200ac7(%rip)        # 0x601048 <foo>
   0x0000000000400581 <+19>:    mov    0x200ac5(%rip),%eax        # 0x60104c <bar.2180>
   0x0000000000400587 <+25>:    add    $0x1,%eax
   0x000000000040058a <+28>:    mov    %eax,0x200abc(%rip)        # 0x60104c <bar.2180>
   0x0000000000400590 <+34>:    mov    0x200ab6(%rip),%edx        # 0x60104c <bar.2180>
   0x0000000000400596 <+40>:    mov    0x200aac(%rip),%eax        # 0x601048 <foo>
   0x000000000040059c <+46>:    mov    %eax,%esi
   0x000000000040059e <+48>:    mov    $0x40065c,%edi
   0x00000000004005a3 <+53>:    mov    $0x0,%eax
   0x00000000004005a8 <+58>:    callq  0x400410 <printf@plt>
   0x00000000004005ad <+63>:    pop    %rbp
   0x00000000004005ae <+64>:    retq   
End of assembler dump.
 

Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ objdump

 Disassembly of section .data:

0000000000601030 <__data_start>:
    ...

0000000000601038 <__dso_handle>:
    ...

0000000000601040 <foo>:
  601040:   01 00                   add    %eax,(%rax)
    ...

0000000000601044 <bar.2180>:
  601044:   02 00                   add    (%rax),%al
    ...

0000000000601048 <foo>:
  601048:   0a 00                   or     (%rax),%al
    ...

000000000060104c <bar.2180>:
  60104c:   14 00                   adc    $0x0,%al
 

Π˜Ρ‚Π°ΠΊ, ваши Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ находятся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌ смСщСниСм.

БтатичСскиС Ρ‡Π»Π΅Π½Ρ‹ класса Π² C++

Π§Π»Π΅Π½Ρ‹ класса ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом static. Когда Ρ‡Π»Π΅Π½ класса ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ статичСский, Ρ‚ΠΎ Ρ‚Π΅ΠΌ самым компилятору даСтся ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ эта пСрСмСнная Π½Π΅ динамичСская, Ρ‚.Π΅. ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классу ΠΈ Π½Π΅ даётся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ этого класса. БтатичСская пСрСмСнная сущСствовуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² классС, Ρ‚.Π΅. всСгда Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° копия этого Ρ‡Π»Π΅Π½Π°, сколько Π±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого класса Π½ΠΈ создавалось. ΠŸΡ€ΠΎΡ‰Π΅ говоря, статичСскиС Ρ‡Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классу, Π° Π½Π΅ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, сколько Π±Ρ‹ ΠΈΡ… Π½Π΅ Π±Ρ‹Π»ΠΎ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Π½Π΅ содСрТат эти статичСскиС Ρ‡Π»Π΅Π½Ρ‹ класса, ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ со статичСскими Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ динамичСскиС Ρ‡Π»Π΅Π½Ρ‹ класса, Π° статичСскиС Ρ‡Π»Π΅Π½Ρ‹ класса ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² классС, для Π½ΠΈΡ… класс являСтся пространством ΠΈΠΌΡ‘Π½. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ Ρ‡Ρ‚ΠΎ статичСскиС Ρ‡Π»Π΅Π½Ρ‹ класса это просто ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² пространсвС ΠΈΠΌΡ‘Π½ класса.

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

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Java, C#, PHP ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π‘ΠΈ-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… языков программирования, Π² ΠΎΠ»Π΄ΡΠΊΡƒΠ»ΡŒΠ½ΠΎΠΌ C++ со статичСскими ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ всё Ρ‚Π°ΠΊ просто. БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса C++ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ‡ΡƒΡ‚ΡŒ слоТнСС. Π’ C++ нСльзя просто Π²Π·ΡΡ‚ΡŒ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² классС ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΊΠ°ΠΊ это дСлаСтся Π² Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π»Π°Π½Π³Π°Ρ… программирования. Π’ C++ всС статичСскиС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ нулями ΠΏΡ€ΠΈ создании ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ другая инициализация Π½Π΅ прСдусмотрСна. ΠŸΡ€ΠΈ объявлСнии статичСского Ρ‡Π»Π΅Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… класса этот Ρ‡Π»Π΅Π½ Π½Π΅ опрСдСляСтся. НСобходимо ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π½Π΅ класса Π² глобальном скопС ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊ. Π­Ρ‚ΠΎ дСлаСтся ΠΏΡƒΡ‚Π΅ΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ объявлСния статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π² C++ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ класса Π½Π°Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄Π²Π°ΠΆΠ΄Ρ‹ β€” Π² классС ΠΈ Π² глобальной области видимости, ΠΈΠ½Π°Ρ‡Π΅ Π½ΠΈΠΊΠ°ΠΊ. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ объявлСниС статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² глобальном скопС ΠΈ большС Π½ΠΈΠ³Π΄Π΅, Π½ΠΈ Π² кострукторС, Π½ΠΈ Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈ констурктора, Π½ΠΈ Π³Π΄Π΅ Π»ΠΈΠ±ΠΎ Π΅Ρ‰Ρ‘, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² глобальном скопС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€


class Counter {
	static int count;
	public:
	void setcount(int i) {count = i;};
	void showcount() {cout 

БтатичСская пСрСмСнная count Ρ‚ΠΈΠΏΠ° int ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π² Π΄Π²ΡƒΡ… мСстах: Π² классС Counter ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π² глобальном скопС ΠΊΠ°ΠΊ пСрСмСнная Π² пространсвС ΠΈΠΌΡ‘Π½ (Π² классС) Counter. Borland C++ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ count Π½ΡƒΠ»Π΅ΠΌ. ИмСнно поэтому ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² showcount() Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π½ΡƒΠ»ΡŒ. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π° устанавливаСт count Ρ€Π°Π²Π½Ρ‹ΠΌ 10. ПослС этого ΠΎΠ±Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π° ΠΈ b выводят с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ showcount() ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, Ρ€Π°Π²Π½ΡƒΡŽ 10. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° копия count, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ совмСстно ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π° ΠΈ b, Ρ‚ΠΎ Π½Π° экран выводится Π² ΠΎΠ±ΠΎΠΈΡ… случаях Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10.

Π“Π΄Π΅ хранятся статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² C ΠΈ c++?

Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» это с objdump ΠΈ gdb, Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ:

(gdb) disas fooTest
Dump of assembler code for function fooTest:
   0x000000000040052d <+0>: push   %rbp
   0x000000000040052e <+1>: mov    %rsp,%rbp
   0x0000000000400531 <+4>: mov    0x200b09(%rip),%eax        # 0x601040 <foo>
   0x0000000000400537 <+10>:    add    x1,%eax
   0x000000000040053a <+13>:    mov    %eax,0x200b00(%rip)        # 0x601040 <foo>
   0x0000000000400540 <+19>:    mov    0x200afe(%rip),%eax        # 0x601044 <bar.2180>
   0x0000000000400546 <+25>:    add    x1,%eax
   0x0000000000400549 <+28>:    mov    %eax,0x200af5(%rip)        # 0x601044 <bar.2180>
   0x000000000040054f <+34>:    mov    0x200aef(%rip),%edx        # 0x601044 <bar.2180>
   0x0000000000400555 <+40>:    mov    0x200ae5(%rip),%eax        # 0x601040 <foo>
   0x000000000040055b <+46>:    mov    %eax,%esi
   0x000000000040055d <+48>:    mov    x400654,%edi
   0x0000000000400562 <+53>:    mov    x0,%eax
   0x0000000000400567 <+58>:    callq  0x400410 <printf@plt>
   0x000000000040056c <+63>:    pop    %rbp
   0x000000000040056d <+64>:    retq   
End of assembler dump.

(gdb) disas barTest
Dump of assembler code for function barTest:
   0x000000000040056e <+0>: push   %rbp
   0x000000000040056f <+1>: mov    %rsp,%rbp
   0x0000000000400572 <+4>: mov    0x200ad0(%rip),%eax        # 0x601048 <foo>
   0x0000000000400578 <+10>:    add    x1,%eax
   0x000000000040057b <+13>:    mov    %eax,0x200ac7(%rip)        # 0x601048 <foo>
   0x0000000000400581 <+19>:    mov    0x200ac5(%rip),%eax        # 0x60104c <bar.2180>
   0x0000000000400587 <+25>:    add    x1,%eax
   0x000000000040058a <+28>:    mov    %eax,0x200abc(%rip)        # 0x60104c <bar.2180>
   0x0000000000400590 <+34>:    mov    0x200ab6(%rip),%edx        # 0x60104c <bar.2180>
   0x0000000000400596 <+40>:    mov    0x200aac(%rip),%eax        # 0x601048 <foo>
   0x000000000040059c <+46>:    mov    %eax,%esi
   0x000000000040059e <+48>:    mov    x40065c,%edi
   0x00000000004005a3 <+53>:    mov    x0,%eax
   0x00000000004005a8 <+58>:    callq  0x400410 <printf@plt>
   0x00000000004005ad <+63>:    pop    %rbp
   0x00000000004005ae <+64>:    retq   
End of assembler dump.

Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ objdump

Disassembly of section .data:

0000000000601030 <__data_start>:
    ...

0000000000601038 <__dso_handle>:
    ...

0000000000601040 <foo>:
  601040:   01 00                   add    %eax,(%rax)
    ...

0000000000601044 <bar.2180>:
  601044:   02 00                   add    (%rax),%al
    ...

0000000000601048 <foo>:
  601048:   0a 00                   or     (%rax),%al
    ...

000000000060104c <bar.2180>:
  60104c:   14 00                   adc    x0,%al

Π˜Ρ‚Π°ΠΊ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ваши Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ располоТСны Π² событии Ρ€Π°Π·Π΄Π΅Π»Π° Π΄Π°Π½Π½Ρ‹Ρ… с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ смСщСниСм.

ИспользованиС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова static Π² C — Embedded blog — System

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ области Π΄Π°Π½Π½Ρ‹Ρ… — ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ («int foo = 5;») ΠΈ BSS («int bar;»)

Π£ мСня Π½Π΅Ρ‚ врСмя Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠΎΠΏΠ°Ρ‚ΡŒ это, Π½ΠΎ стандарт C ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ BSS устанавливаСтся Π½Π° 0 ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ main ().

volatile ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ, ΠΈ компилятор НЕ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° останСтся ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ — это примСняСтся ΠΏΡ€ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. НапримСр, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСдставляСт собой рСгистр состояния оборудования, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ Π² памяти Π² адрСсноС пространство, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ устройства.ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово volatile Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΈΠ·-Π·Π° C Π²ΠΎ встроСнных систСмах.

ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²Ρ‹ΠΉ uint8_t * stat_reg = 0x1234; // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° рСгистр статуса, адрСс 0x1234

uint8_t stat; // создаСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ

stat = * stat_reg; // считываСм рСгистр состояния

while (* stat_reg & STAT_BUSY) / * WAIT * /; // ΠΆΠ΄Π΅ΠΌ, ΠΏΠΎΠΊΠ° устройство Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ занято — статус ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ

const ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‰ΡŒ постоянная ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ измСнСнию.это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚. ЧСстно говоря, ΠΌΠ½Π΅ всСгда Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π΅Π³ΠΎ использованиС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

const char const * foo;

char const * foo;

cost char * foo;

всС Ρ€Π°Π·Π½Ρ‹Π΅. Как я понимаю, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ справа ΠΎΡ‚ const — это Π²Π΅Ρ‰ΡŒ const. НО — нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ C Π±ΠΎΠ»Π΅Π΅ 30 Π»Π΅Ρ‚, ΠΌΠ½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ нСсколько ΡƒΠ΄Π°Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ поТалуСтся, Ссли Π²Ρ‹ ошиблись.

Π’ΠΎ встроСнных систСмах это позволяСт Π²Π°ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π³Π΄Π΅ хранятся значСния — Π² RAM ΠΈΠ»ΠΈ FLASH (EEPROM).ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•: каТдая встроСнная систСма (сСмСйство MPU) Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся!

int foo = 5; // копируСтся ΠΈΠ· FLASH Π² RAM ΠΏΠ΅Ρ€Π΅Π΄ main ()

const int bar = 6; // сохраняСм 6 Π²ΠΎ FLASH, Π° bar ΠΈΠΌΠ΅Π΅Ρ‚ адрСс flash.

«int foo = 5;» случай интСрСсный. 5 сохраняСтся Π²ΠΎ FLASH, Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ копируСтся Π² RAM ΠΏΠΎ адрСсу ‘foo «. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ RAM ΠΏΠΎ своСму ТСланию. НО ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ копия FLASH Π½Π΅ измСняСтся, поэтому снова foo = 5.

Global ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, extern, static, const

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, extern, static, const

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ пСрСмСнная — это пСрСмСнная, которая встрСчаСтся Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области.Они ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ созданы.

Иногда ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚

автоматичСскими ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ автоматичСски создаСтся, ΠΊΠΎΠ³Π΄Π° функция Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈ автоматичСски ΠΏΡ€ΠΎΡ‡ΡŒ, ΠΊΠΎΠ³Π΄Π° функция Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово auto ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для явного создания этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½ΠΎ Π½Π΅ трСбуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ auto.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ внСшниС

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ пСрСмСнная — это пСрСмСнная, которая опрСдСляСтся Π²Π½Π΅ всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ доступСн для всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ зависят ΠΎΡ‚ области дСйствия ΠΈ всСгда доступны, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ глобальная пСрСмСнная сущСствуСт Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΉ доступ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ». Для этого пСрСмСнная Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ объявлСна ​​в ΠΎΠ±ΠΎΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ…, Π½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extern Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ «Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ» объявлСнию.

БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

БтатичСская пСрСмСнная

ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ глобальной ΠΈΠ»ΠΈ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.Оба создаСтся ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ объявлСнию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова static .

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ статичСская пСрСмСнная — это пСрСмСнная, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ΄Π½Π° функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ, ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Когда создаСтся локальная статичСская пСрСмСнная, Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ присвоСно Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ 0.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ статичСская пСрСмСнная — это Ρ‚Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ Π³Π΄Π΅ ΠΎΠ½ создан.БчитаСтся, Ρ‡Ρ‚ΠΎ эта пСрСмСнная ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„Π°ΠΉΠ»Π° .

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π’ C Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° прСпроцСссора #define использовалась для создания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с постоянноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ всС Π΅Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² C ++, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ #define, прСпроцСссор Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΊΠΎΠ΄ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ #defined с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Ну, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ пСрСмСнная #defined сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Π³Π΄Π΅ ΠΎΠ½Π° создана, это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ с ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠ»Π°Ρ‡Π΅Π²Π½Ρ‹ΠΌ послСдствиям.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, концСпция ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΉ константы, которая ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° пСрСмСнная Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° Π² C ++.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² C ++, ΠΏΠ΅Ρ€Π΅Π΄ объявлСниСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово const . Π­Ρ‚ΠΎ сообщаСт компилятору, Ρ‡Ρ‚ΠΎ «ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Π±Ρ‹Π»Π° создано, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ «

ΠŸΡ€ΠΈ создании постоянной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΅ΠΉ Π”ΠžΠ›Π–ΠΠž Π±Ρ‹Ρ‚ΡŒ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Static Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C

Π’ этом руководствС ΠΌΡ‹ объясним ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static, примСняя Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ функциях.БтатичСский — это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C, ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

статичСский {Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…} {имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ}

БтатичСскиС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Когда пСрСмСнная Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ статична, пСрСмСнная сохраняСт своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

//Example1.c

#include

int fun1 ()
{

int count = 0;
count ++;
счСтчик Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°;
}

int fun2 ()
{
static int count = 0;
count ++;
счСтчик Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°;
}

int main ()
{
printf («fun1 1-ΠΉ Π²Ρ‹Π·ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:% d \ n», fun1 ());
printf («2-ΠΉ Π²Ρ‹Π·ΠΎΠ² fun1 Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:% d \ n \ n», fun1 ());

printf («fun2 1-ΠΉ Π²Ρ‹Π·ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:% d \ n», fun2 ());
printf («2-ΠΉ Π²Ρ‹Π·ΠΎΠ² fun2 Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:% d \ n», fun2 ());

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}


Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1.c, Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: fun1 () ΠΈ fun2 () . Π’ fun1 () ΠΌΡ‹ объявляСм ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ (count) ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ count ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ main () , ΠΌΡ‹ Π΄Π²Π°ΠΆΠ΄Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ fun1 () , ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ пСрСмСнная count очищаСтся послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹Π·ΠΎΠ²Π° fun1 () . Π’ fun2 () ΠΌΡ‹ объявили ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ count ΠΊΠ°ΠΊ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΅Π³ΠΎ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ сохраняСтся.Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ main () , ΠΌΡ‹ Π΄Π²Π°ΠΆΠ΄Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ fun2 () : Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2.

БтатичСскиС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

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

БтатичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

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

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ статичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Если статичСская пСрСмСнная Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° явно, Ρ‚ΠΎ ΠΎΠ½Π° инициализируСтся ΠΊΠ°ΠΊ 0.

//Example2.c

#include

int main ()
{
статичСский int i;

printf («Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i:% d \ n», i);

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}


Π’ Example2.c ΠΌΡ‹ объявили ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i, которая Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°. Однако, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пСрСмСнная статична, ΠΎΠ½Π° автоматичСски инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0.

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

//Example3.c

#include

int fun1 ()
{
Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 5;
}

int main ()
{
статичСский int i = fun1 ();
printf («Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i:% d \ n», i);
Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}


Π’ Example3.c ΠΌΡ‹ пытаСмся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ fun1 () .Однако, ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΏΡ€ΠΈ компиляции ΠΊΠΎΠ΄Π° возвращаСтся ошибка.

РСзюмС

ВрСмя ΠΆΠΈΠ·Π½ΠΈ статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°Π²Π½Ρ‹.

Если статичСская пСрСмСнная Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°, ΠΎΠ½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0.

Ни глобальная статичСская пСрСмСнная, Π½ΠΈ статичСская функция нСдоступны ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΎΡ‚ Ρ‚ΠΎΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°.

константных ΠΈ статичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² C: C_Programming

МнС Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΎ Ρ‡Π΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ StackOverflow.

const просто ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ аспСкт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π² области объявлСния. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

  const int a = 2;
  

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° нСльзя ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.

  const int * ptr;
  

ΠŸΠ°ΠΌΡΡ‚ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ptr , Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

  int * const ptr = & a;
  

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля ptr нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, хотя ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,Π³Ρ€Π°ΠΌΠΌ. * ptr = 1; ).

  const int * const ptr = & a;
  

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля ptr ΠΈΠ»ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ константности, отбросив Π΅Π΅, Π½ΠΎ это Π½Π΅ совсСм Π²Π°ΠΆΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚.

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

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

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

БтатичСская пСрСмСнная — ΠΎΠ±Π·ΠΎΡ€

7.2 НазначСниС мСст хранСния

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

Випичная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° вычисляСт ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. НСкоторыС ΠΈΠ· Π½ΠΈΡ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² языкС, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ Алголу, ΠΈΠΌΠ΅ΡŽΡ‚ явныС ΠΈΠΌΠ΅Π½Π° Π² исходном ΠΊΠΎΠ΄Π΅. Π”Ρ€ΡƒΠ³ΠΈΠ΅ значСния ΠΈΠΌΠ΅ΡŽΡ‚ нСявныС ΠΈΠΌΠ΅Π½Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i — 3 Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ A [i — 3, j + 2].

β– 

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

β– 

Напротив, компилятор ΠΈΠΌΠ΅Π΅Ρ‚ большС свободы Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ бСзымянныС значСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ i — 3. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… способами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ³Π»Π°ΡΡƒΡŽΡ‚ΡΡ со смыслом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ свободу дСйствий Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ находятся эти цСнности ΠΈ ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ ΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компиляции Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ΄, скомпилированный для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ всС значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π·Π²Π°Ρ‚ΡŒ — ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

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

Π’ ΠΌΠΎΠ΄Π΅Π»ΠΈ Β«ΠΏΠ°ΠΌΡΡ‚ΡŒ-ΠΏΠ°ΠΌΡΡ‚ΡŒΒ» компилятор ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС значСния находятся Π² памяти. ЗначСния Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π² рСгистры ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, Π½ΠΎ ΠΊΠΎΠ΄ сохраняСт ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ опрСдСлСния.Π’ ΠΌΠΎΠ΄Π΅Π»ΠΈ Β«ΠΏΠ°ΠΌΡΡ‚ΡŒ-ΠΏΠ°ΠΌΡΡ‚ΡŒΒ» ir ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠΌΠ΅Π½ физичСских рСгистров . ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² рСгистрах Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅.

ЀизичСский рСгистр

ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ рСгистр Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ isa

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

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ рСгистр

символичСскоС имя, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² ir вмСсто ΠΈΠΌΠ΅Π½ΠΈ физичСского рСгистра

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти Ρ‚Π°ΠΊΠΆΠ΅ влияСт Π½Π° структуру компилятора. НапримСр, Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Β«ΠΏΠ°ΠΌΡΡ‚ΡŒ-ΠΏΠ°ΠΌΡΡ‚ΡŒΒ» Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ рСгистров — это оптимизация, ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‰Π°Ρ ΠΊΠΎΠ΄. Π’ ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти «рСгистр-рСгистр» Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ рСгистров являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„Π°Π·ΠΎΠΉ, которая сниТаСт ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² рСгистрах ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… рСгистров Π½Π° ΠΈΠΌΠ΅Π½Π° физичСских рСгистров.

7.2.1 Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ структур Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния

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

На рис. 7.2 ΠΏΠΎΠΊΠ°Π·Π°Π½ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ°ΠΊΠ΅Ρ‚ адрСсного пространства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠΉ скомпилированной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.ΠœΠ°ΠΊΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ области ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части адрСсного пространства. Код находится Π²Π½ΠΈΠ·Ρƒ адрСсного пространства; смСТная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, помСчСнная ΠΊΠ°ΠΊ Static , содСрТит ΠΊΠ°ΠΊ статичСскиС, Ρ‚Π°ΠΊ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ области Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, созданныС компилятором. ΠžΠ±Π»Π°ΡΡ‚ΡŒ Π½Π°Π΄ этими статичСскими областями Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для областСй Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ ΠΈ ΡΠΆΠΈΠΌΠ°ΡŽΡ‚ΡΡ. Если компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ars Π² стСкС, Π΅ΠΌΡƒ потрСбуСтся стСк Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков Ρ‚Π°ΠΊΠΆΠ΅ потрСбуСтся ΠΊΡƒΡ‡Π° для динамичСски Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ….Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ эффСктивноС использованиС пространства, ΠΊΡƒΡ‡Π° ΠΈ стопка Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π°Ρ… ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ пространства ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ. На Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ΅ ΠΊΡƒΡ‡Π° увСличиваСтся Π² сторону Π±ΠΎΠ»Π΅Π΅ высоких адрСсов, Π° стСк растСт Π² сторону Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΡ… адрСсов. ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅ располоТСниС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Рисунок 7.2. Π‘Ρ…Π΅ΠΌΠ° логичСского адрСсного пространства.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ области статичСских Π΄Π°Π½Π½Ρ‹Ρ… для хранСния постоянных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

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

Рисунок 7.3. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ взгляды Π½Π° адрСсноС пространство.

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

Page

Π•Π΄ΠΈΠ½ΠΈΡ†Π° распрСдСлСния Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ адрСсном пространствС

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ страницы Π² физичСскиС страничныС Ρ„Ρ€Π΅ΠΉΠΌΡ‹.

7.2.2 Π‘Ρ…Π΅ΠΌΠ° для областСй Π΄Π°Π½Π½Ρ‹Ρ…

Для удобства компилятор Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ сроками ΠΆΠΈΠ·Π½ΠΈ ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ; ΠΎΠ½ создаСт для Π½ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ области Π΄Π°Π½Π½Ρ‹Ρ…. Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ этих областСй Π΄Π°Π½Π½Ρ‹Ρ… зависит ΠΎΡ‚ языковых ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΡ…ΡΡ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΈ видимости Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. НапримСр, компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ автоматичСскоС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ локальной ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ записи Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ врСмя ΠΆΠΈΠ·Π½ΠΈ Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… совпадаСт со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ ar. Напротив, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ локальноС для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ статичСскоС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… — Π² «статичСской» области памяти.На рис. 7.4 ΠΏΠΎΠΊΠ°Π·Π°Π½ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» для присвоСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ слоТныС.

Рисунок 7.4. ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ областям Π΄Π°Π½Π½Ρ‹Ρ….

Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… автоматичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ar ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ эффСктивному доступу. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠ΄Ρƒ ΡƒΠΆΠ΅ трСбуСтся arp Π² рСгистрС, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ смСщСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ arp для доступа ΠΊ этим значСниям с Ρ‚Π°ΠΊΠΈΠΌΠΈ опСрациями, ΠΊΠ°ΠΊ loadAI ΠΈΠ»ΠΈ loadAO. Частый доступ ΠΊ ar, скорСС всСго, сохранит Π΅Π³ΠΎ Π² кэшС Π΄Π°Π½Π½Ρ‹Ρ….ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ со статичСским Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ ΠΈΠ»ΠΈ глобальной Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π² области Π΄Π°Π½Π½Ρ‹Ρ… Π² «статичСской» области памяти. Доступ ΠΊ этим значСниям Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΎ врСмя выполнСния; компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ адрСс для области Π΄Π°Π½Π½Ρ‹Ρ… Π² рСгистрС.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ адрСс статичСской ΠΈΠ»ΠΈ глобальной области Π΄Π°Π½Π½Ρ‹Ρ…, компилятор ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΡƒ языка ассСмблСра.

ЗначСния, хранящиСся Π² ΠΊΡƒΡ‡Π΅, ΠΈΠΌΠ΅ΡŽΡ‚ врСмя ΠΆΠΈΠ·Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π² ΠΊΡƒΡ‡Ρƒ двумя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ явно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ· ΠΊΡƒΡ‡ΠΈ; компилятор Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΡƒΡ‡Ρƒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, которая Π΅Π³ΠΎ создала. Π’ любом случаС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΡƒΡ‡Π΅ прСдставлСно ΠΏΠΎΠ»Π½Ρ‹ΠΌ адрСсом, Π° Π½Π΅ смСщСниСм ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ адрСса.

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ кэш-памяти

Один ΠΈΠ· способов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ Ρ€Π°Π·Ρ€Ρ‹Π² ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ процСссора ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ памяти, — это использованиС кэш-памяти .Кэш — это нСбольшая быстрая ΠΏΠ°ΠΌΡΡ‚ΡŒ, размСщаСмая ΠΌΠ΅ΠΆΠ΄Ρƒ процСссором ΠΈ основной ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Кэш Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° ΡΠ΅Ρ€ΠΈΡŽ ΠΊΠ°Π΄Ρ€ΠΎΠ² Ρ€Π°Π²Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° . ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ адрСсноС ΠΏΠΎΠ»Π΅, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Ρ‚Π΅Π³ΠΎΠΌ , Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится адрСс основной памяти.

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

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

НСкоторыС кэши ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ слоТныС сопоставлСния. Кэш-ΠΏΠ°ΠΌΡΡ‚ΡŒ с ассоциативным Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ нСсколько ΠΊΠ°Π΄Ρ€ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки кэша, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π²Π° ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΠ°Π΄Ρ€Π° Π½Π° строку. ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ассоциативный кСш ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ любой Π±Π»ΠΎΠΊ Π² любой ΠΊΠ°Π΄Ρ€. ОбС эти схСмы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ассоциативный поиск ΠΏΠΎ Ρ‚Π΅Π³Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, находится Π»ΠΈ Π±Π»ΠΎΠΊ Π² кэшС. АссоциативныС схСмы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊ Π²Ρ‹ΡΠ΅Π»ΡΡ‚ΡŒ; распространСнными схСмами ΡΠ²Π»ΡΡŽΡ‚ΡΡ случайная Π·Π°ΠΌΠ΅Π½Π° ΠΈ Π·Π°ΠΌΠ΅Π½Π° Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π½Π΅Π΄Π°Π²Π½ΠΎ использованного (LRU).

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

НСкоторыС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄Π°Π²Π°Ρ‚ΡŒ подсказки ΠΊΠ΅ΡˆΡƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ( ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ, ) ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ ( ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ΠΎ, ).

НазначСниС смСщСний

Π’ случаС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…, статичСских ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… областСй Π΄Π°Π½Π½Ρ‹Ρ… компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ смСщСниС Π²Π½ΡƒΡ‚Ρ€ΠΈ области Π΄Π°Π½Π½Ρ‹Ρ….Target isas ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… Π² памяти. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа ΠΈ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… слов (32-Π±ΠΈΡ‚Π½Ρ‹Ρ…), Ρ‡Ρ‚ΠΎ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… слов (64-Π±ΠΈΡ‚Π½Ρ‹Ρ…), ΠΈ эти строковыС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π½ΠΎΠ³ΠΎ слова (16 Π±ΠΈΡ‚). ΠœΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ эти ΠΏΡ€Π°Π²ΠΈΠ»Π° выравнивания.

НСкоторыС процСссоры ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΏΠΎΠΌΠΈΠΌΠΎ простой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°. Вакая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° часто добавляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ограничСния выравнивания.НапримСр, isa ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ar ΠΈ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ar. Π£ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² dec vax Π±Ρ‹Π»Π° особСнно слоТная инструкция Π²Ρ‹Π·ΠΎΠ²Π°; ΠΎΠ½ Ρ…Ρ€Π°Π½ΠΈΡ‚ рСгистры ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ части состояния процСссора Π½Π° основС Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ маски для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, созданной компилятором.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ области Π΄Π°Π½Π½Ρ‹Ρ… компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ присваиваСт ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² области Π΄Π°Π½Π½Ρ‹Ρ… Π΅Π΅ смСщСниС. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°ΠΊΠ΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ выравнивания isa. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ отступ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅.Π§Ρ‚ΠΎΠ±Ρ‹ свСсти ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ бСсполСзноС пространство, компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ, ΠΎΡ‚ Ρ‚Π΅Ρ…, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ»Π° выравнивания самыС строгиС, Π΄ΠΎ Ρ‚Π΅Ρ…, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… мСньшС всСго. (НапримСр, Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ слова являСтся Π±ΠΎΠ»Π΅Π΅ строгим, Ρ‡Π΅ΠΌ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ слов.) Π—Π°Ρ‚Π΅ΠΌ компилятор Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ смСщСния для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ класс, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΏΠΎΠΊΠ° всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ смСщСния. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Π° выравнивания ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Π²ΠΎΠΉΠΊΠΈ, ΠΊΠΎΠ½Π΅Ρ† ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, СстСствСнно, соотвСтствуСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков ассСмблСра Π΅ΡΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»Π° области Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ слова.

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ смСщСния ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ кэша

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

Если Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ расстояниСм ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ каТСтся управляСмым. Однако, ΠΊΠΎΠ³Π΄Π° Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ всС Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ располоТСния кэша оказываСтся np-ΠΏΠΎΠ»Π½ΠΎΠΉ.Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ; это создаСт ΡΠ΅Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ компилятор Π½Π΅ смоТСт ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Если ΠΌΡ‹ рассмотрим Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ нСсколько Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° становится Π΅Ρ‰Π΅ Ρ…ΡƒΠΆΠ΅. Если компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ взаимосвязь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ссылками Π½Π° массивы Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ массивами, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ссылки ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² Ρ€Π°Π·Π½Ρ‹Π΅ строки кэша ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ.

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

7.2.3 Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² рСгистрах

Π’ ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти «Ρ€Π΅Π³ΠΈΡΡ‚Ρ€-рСгистр» компилятор пытаСтся ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ рСгистрам.Π’ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ компилятор полагаСтся Π½Π° Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ рСгистров для сопоставлСния Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… рСгистров Π² ir с физичСскими рСгистрами Π½Π° процСссорС, Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ любого Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСгистра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² физичСском рСгистрС. Если компилятор Ρ…Ρ€Π°Π½ΠΈΡ‚ статичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² рСгистрС, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ использованиСм Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Π»ΠΈΠ±ΠΎ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Π»ΠΈΠ±ΠΎ Π² любом мСстС Π²Ρ‹Π·ΠΎΠ²Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

Spill

Когда Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ рСгистров Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ рСгистр физичСскому рСгистру, ΠΎΠ½ пропускаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ , сохраняя Π΅Π³ΠΎ Π² RAM послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ опрСдСлСния ΠΈ загруТая Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ рСгистр ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ использованиСм.

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

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² рСгистрС, называСтся ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ; Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, называСтся Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ . ΠΠ΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ.ЗначСния, хранящиСся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, основанных Π½Π° указатСлях, часто Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹. ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ ΠΏΠΎ ссылкС, ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ области видимости ΠΈΠΌΠ΅Π½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌΠΈ. МногиС компиляторы Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ значСния элСмСнтов массива ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Π΅ значСния, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΌΠΎΠ³ΡƒΡ‚ Π»ΠΈ Π΄Π²Π΅ ссылки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ A [i, j] ΠΈ A [m, n], ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ мСсто. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² рСгистрС Π½ΠΈ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ, Π½ΠΈ ΠΏΡ€ΠΈ использовании Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ значСния.

ΠžΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, — ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ .

НСоднозначноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π›ΡŽΠ±ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΏΠΎ нСскольким ΠΈΠΌΠ΅Π½Π°ΠΌ, — это Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ .

ΠŸΡ€ΠΈ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· этих случаСв. Рассмотрим ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ присвоСний Π½Π° полях, прСдполагая, Ρ‡Ρ‚ΠΎ ΠΈ a, ΠΈ b Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹. Если a ΠΈ b относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΌΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Ρ‚ΠΎΠ³Π΄Π° c ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 26; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ m + n + 13. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ a Π² рСгистрС ΠΏΡ€ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ссли ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ мСстополоТСний, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π΄Π²Π° ΠΈΠΌΠ΅Π½ΠΈ, Π½Π΅ пСрСсСкаСтся.Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° дорогостоящий, поэтому компиляторы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ пСрСносят Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Π΅ значСния Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ с Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ использованиСм ΠΈ сохранСниСм послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ опрСдСлСния.

a ← m + n;

Π± ← 13;

c ← a + b;

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π°Π½Π°Π»ΠΈΠ· нСоднозначности фокусируСтся Π½Π° Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ являСтся Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ. Анализ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ повСрхностным ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. НапримСр, Π² c любая локальная пСрСмСнная, адрСс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ бСрСтся, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Π° Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° объявлСна.Π‘ΠΎΠ»Π΅Π΅ слоТныС Π°Π½Π°Π»ΠΈΠ·Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½Π°Π±ΠΎΡ€Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-указатСля; любая пСрСмСнная, Π½Π°Π±ΠΎΡ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π΅Π½. К соТалСнию, Π°Π½Π°Π»ΠΈΠ· Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всС нСоднозначности. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ² ΠΊ остороТной ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ языка ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ компилятора Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ. НапримСр, ansi c Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слова, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ нСоднозначности. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово restrict сообщаСт компилятору, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π΅Π½.Он часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ адрСс нСпосрСдствСнно Π½Π° мСсто Π²Ρ‹Π·ΠΎΠ²Π°. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово volatile позволяСт программисту ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ содСрТимоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ ΠΈ Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ увСдомлСния. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для рСгистров Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ устройства ΠΈ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ обслуТивания ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ управлСния Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

ΠžΠ±Π·ΠΎΡ€ Ρ€Π°Π·Π΄Π΅Π»Π°

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния, вычисляСмого Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π³Π΄Π΅ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ сохранСно: Π² памяти ΠΈΠ»ΠΈ рСгистрС ΠΈ, Π² любом случаС, Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ мСстС.Он Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ мСстополоТСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ соотвСтствуСт ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ (см. Π Π°Π·Π΄Π΅Π» 6.3), Ρ‚Π°ΠΊ ΠΈ Π΅Π³ΠΎ адрСсуСмости (см. Π Π°Π·Π΄Π΅Π» 6.4.3). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, компилятор сгруппируСт значСния Π² области Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ класс хранСния.

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

комиссия Π·Π° Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ () {

int a, * b;

…

b = & a;

…

}

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1.

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

2.

Рассмотрим ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ c Π½Π° полях. Π’ Π½Π΅ΠΌ ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ значСния: a, b ΠΈ * b. КакиС значСния Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹? КакиС ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Π΅?

Π―Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ области Π² C Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠ»ΠΎΡ…ΠΎ, ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ extern?

На ΠΌΠΎΠΉ взгляд, всС это привязано ΠΊ области видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π½Π΅ константа, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ измСняСмоС). Π­Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° зрСния, ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΡŽ, лишСна ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ нюансов, Π½ΠΎ это ΠΏΡ€Π°Π³ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈ ΠΏΡ€ΠΈΠ·Ρ‹Π² Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ самым основным Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: Β«Π­Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π»ΠΎ!Β» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ Π½Π° Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒΡŽΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с условиями Π³ΠΎΠ½ΠΊΠΈ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ 50 000-строчная функция со всСми Π²ΠΈΠ΄Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π²Π²Π΅Ρ€Ρ…Ρƒ, ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ goto , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ приятно с Ρ‚Π°ΠΊΠΎΠΉ Ρ‡ΡƒΠ΄ΠΎΠ²ΠΈΡ‰Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°ΡΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ происходит с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ слоТно. Π’ Ρ‚Π°ΠΊΠΎΠΌ Ρ‡ΡƒΠ΄ΠΎΠ²ΠΈΡ‰Π½ΠΎΠΌ случаС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ «внСшним» ΠΈ Β«Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΒ» ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктом тСряСт свою ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ простая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ· 80 строк, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ просто ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ запускаСтС с глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π»ΠΈΠ±ΠΎ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ связью ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Ρ„Π°ΠΉΠ»Π°, Π»ΠΈΠ±ΠΎ с внСшнСй связью, Π½ΠΎ Π² любом случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° малСнькая).Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ ΠΏΠ»ΠΎΡ…ΠΎ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‡ΡƒΠ΄ΠΎΠ²ΠΈΡ‰Π½Ρ‹ΠΉ класс Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит всю Π»ΠΎΠ³ΠΈΠΊΡƒ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с тысячами ΠΈ тысячами строк ΠΊΠΎΠ΄Π° для Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ этом случаС Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹, Ρ‡Π΅ΠΌ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ 80-строчной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

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

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

БтатичСскиС ΠΈ нСстатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° языкС C

Π’ качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Π² языкС C static часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для измСнСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

БтатичСски ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

1. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ статичСская пСрСмСнная: Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static ΠΏΠ΅Ρ€Π΅Π΄ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ глобальная пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ глобальная статичСская пСрСмСнная.

(1) ΠœΠ΅ΡΡ‚ΠΎ Π² памяти: статичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ хранСния.

(2) ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия: Π­Ρ‚ΠΎ Π²ΠΈΠ΄Π½ΠΎ ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

2.Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ статичСская пСрСмСнная: Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static ΠΏΠ΅Ρ€Π΅Π΄ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ локальная пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ локальная статичСская пСрСмСнная.

(1) ΠœΠ΅ΡΡ‚ΠΎ Π² памяти: статичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ хранСния. (ПослС добавлСния статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΅Π΅ мСсто хранСния измСняСтся со стСка Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ статичСского хранСния)

(2) ОбъСм: Π’ΠΈΠ΄Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.



БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π²ΠΎ врСмя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ статичСскими Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ статичСскими Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ:

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

ВрСмя сущСствования статичСской локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ — это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° integerSource, Π½ΠΎ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π•Π³ΠΎ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ статичСски, ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ характСристики:

(1) ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π° Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ исходноС присвоСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сохранСно ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅.

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

ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

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

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