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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 219

Автор Роббинс ΠΡ€Π½ΠΎΠ»ΡŒΠ΄

3. ЗапуститС Π½Π° своСй систСмС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

ch14-lockall
Π±Π΅Π· ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ посмотритС, смоТСтС Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»-ΠΎΠΏΠ΅Ρ€Π°Π½Π΄.

4. Если Ρƒ вас Π½Π΅-Linux систСма, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π° Π½Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

ch14-lockall
.

5.Β ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

strftimes()
ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°:

size_t strftimes(char *buf, size_t size, const char *format,

Β const struct timeval *tp);

Она Π΄ΠΎΠ»ΠΆΠ½Π° вСсти сСбя ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

strftime()
Π·Π° Ρ‚Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
%q
для обозначСния Β«Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ числа микросСкунд».

6.Β Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

strftimes()
, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ date, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ строку, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ с Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ
+
, ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя (см. date(1)).

7.Β ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° Π²

ch14-timers.c
довольно ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Π°. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с использованиСм
setjmp()
послС Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ ΠΈ
longjmp()
ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигнала. Π£Π»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Π»ΠΈ это структуру ΠΈΠ»ΠΈ ΡΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?

8.Β ΠœΡ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ

ch14-timers.c
содСрТит Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ΅ состояниС Π³ΠΎΠ½ΠΊΠΈ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚Π²Π΅Ρ‚ Π² Π½ΡƒΠΆΠ½ΠΎΠ΅ врСмя, Π½ΠΎ
ch14-timers
приостановлСна, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ сигнал ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½. Какой Π²Ρ‹Π·ΠΎΠ² Π²Ρ‹ сдСлаСтС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°?

9. НарисуйтС Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅

ch14-tsearch
Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 14.4.5 Β«ΠžΠ±Ρ…ΠΎΠ΄ Π΄Π΅Ρ€Π΅Π²Π°:
twalk()
Β».

10.Β Π˜ΡΡΠ»Π΅Π΄ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»

/usr/share/dict/words
Π½Π° систСмС GNU/Linux. (Π­Ρ‚ΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ правописания для
spell
; Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… систСмах ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах.) Π’ Ρ„Π°ΠΉΠ»Π΅ слова Ρ€Π°Π·ΠΌΠ΅ΡˆΠ΅Π½Ρ‹ Π² отсортированном порядкС, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π² строкС.

Для Π½Π°Ρ‡Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

awk
для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ списка Π² случайном порядкС:

$ <b>awk '{ list[$0]++ }</b>

&gt; <b>END { for (i in list) print i }' /usr/share/dict/words &gt; /tmp/wlist</b>

Π”Π°Π»Π΅Π΅, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΄Π²Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. КаТдая Π΄ΠΎΠ»ΠΆΠ½Π° Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ список ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΠΎΠ΅ слово Π² Π΄Π΅Ρ€Π΅Π²Π΅ ΠΈ массивС соотвСтствСнно. Вторая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для сортировки массива

qsort()
, Π° для поиска β€”
bsearch()
. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΠ· Π΄Π΅Ρ€Π΅Π²Π° ΠΈΠ»ΠΈ массива слово '
gravy
'. ВычислитС врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π²ΡƒΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, какая быстрСС. Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ слова Π²Π½ΡƒΡ‚Ρ€ΡŒ Ρ†ΠΈΠΊΠ»Π°, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎΡΡ мноТСство Ρ€Π°Π· (скаТСм, 1000), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ достаточноС для опрСдСлСния Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ врСмя.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄

ps
, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, сколько памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

11.Β ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ запуститС ΠΎΠ±Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, использовав ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ отсортированный словарный Ρ„Π°ΠΉΠ», ΠΈ посмотритС, ΠΊΠ°ΠΊ измСнятся Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ (Ссли ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ измСнятся).

Π§Π°ΡΡ‚ΡŒ 3

ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

Π“Π»Π°Π²Π° 15

ΠžΡ‚Π»Π°Π΄ΠΊΠ°

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ мноТСство ΠΏΡ€Π°Π²ΠΈΠ», начиная с Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ располоТСния Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ располоТСниС ΠΊΠΎΠ΄Π° ΠΈ кончая Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ошибки ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ…; Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ содСрТащиСся Ρ‚Π°ΠΌ совСты Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅! КаТдая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰Π°Ρ нСсколько сот строк ΠΊΠΎΠ΄Π°, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π° ΠΈ спроСктирована, Π° Π½Π΅ обтяпана, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°Ρ‡Π½Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

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

Данная Π³Π»Π°Π²Π° ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ряд Ρ‚Π΅ΠΌ, начиная с ΠΎΠ±Ρ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊ ΠΈ совСтов ΠΏΠΎ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ (ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ элСмСнтарноС использованиС GDB, ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° GNU), пСрСходя ΠΊ ряду ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊ для использования ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ рассмотрСниСм ряда инструмСнтов, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΡ… Π² процСссС ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π“Π»Π°Π²Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌΠΈ свСдСниями ΠΏΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Β«ΠΏΡ€Π°Π²ΠΈΠ» ΠΎΡ‚Π»Π°Π΄ΠΊΠΈΒ», ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ вСсьма Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ.

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π½Π°ΡˆΠΈΡ… совСтов основана Π½Π° нашСм долгосрочном ΠΎΠΏΡ‹Ρ‚Π΅ участия Π² качСствС Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΡ†Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ GNU ΠΏΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅

gawk
(GNU
awk
). Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ, Ссли Π½Π΅ всС, спСцифичСскиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ прСдставляСм, происходят ΠΎΡ‚ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. На протяТСнии Π³Π»Π°Π²Ρ‹ особыС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ словом РСкомСндация.

15.1. Π‘Π½Π°Ρ‡Π°Π»Π° Π³Π»Π°Π²Π½ΠΎΠ΅

Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Π΅Π΄Π΅Ρ‚ сСбя Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ Π² Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ сначала. Часто странноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ·-Π·Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования памяти β€” использования Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, чтСния ΠΈΠ»ΠΈ записи Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ динамичСской памяти ΠΈ Ρ‚.Π΄. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ быстрСС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π² срСдства ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ памяти Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Π΄Π΅Ρ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ.

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

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ являСтся Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ срСдством, ΠΌΡ‹ рассмотрим Π΅Π³ΠΎ Π²Π½Π°Ρ‡Π°Π»Π΅. Π”Π°Π»Π΅Π΅ Π² Π³Π»Π°Π²Π΅ ΠΌΡ‹ обсудим ряд инструмСнтов для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ памяти.

15.2. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

Для использования ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° исходного ΠΊΠΎΠ΄Π°, ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ компилятора

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

На ΠΌΠ½ΠΎΠ³ΠΈΡ… систСмах Unix опция компилятора

-g
являСтся Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ
-O
, которая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ пСрСстановку Π±ΠΈΡ‚ΠΎΠ² ΠΈ участков ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ прямого соотвСтствия с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ исполняСтся, ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ исходного ΠΊΠΎΠ΄Π°. ΠžΡ‚ΠΌΠ΅Π½ΠΈΠ² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ установлСниС связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΈ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, пошаговоС ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. (ПошаговоС исполнСниС вскорС Π±ΡƒΠ΄Π΅Ρ‚ описано.)

GCC, GNU Compiler Collection (коллСкция компиляторов GNU), Π½Π° самом Π΄Π΅Π»Π΅ допускаСт совмСстноС использованиС

-g
ΠΈ
-O
. Однако, это привносит ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅: слСдованиС исполнСнию Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ становится Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌ. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ совмСстного использования ΠΎΠΏΡ†ΠΈΠΉ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ исполняСмом ΠΌΠΎΠ΄ΡƒΠ»Π΅. Они Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ лишь дисковоС пространство, Π° Π½Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ПослС этого установлСнный исполняСмый Ρ„Π°ΠΉΠ» всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹Ρ… случаях.