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

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

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

Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… - img_3.png

Рис. 3.1. АдрСсноС пространство Linux/Unix

Π₯отя ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π½ΠΈΠ΅ стСка ΠΈ ΠΊΡƒΡ‡ΠΈ тСорСтичСски Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, опСрационная систСма ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ этот случай, ΠΈ любая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰Π°ΡΡΡ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π½Π° нСприятности. Π­Ρ‚ΠΎ особСнно Π²Π΅Ρ€Π½ΠΎ для соврСмСнных систСм, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… адрСсныС пространства большиС ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Ρ€Ρ…ΡƒΡˆΠΊΠΎΠΉ стСка ΠΈ ΠΊΠΎΠ½Ρ†ΠΎΠΌ ΠΊΡƒΡ‡ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ области памяти ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ. НапримСр, сСгмСнт тСкста ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для исполнСния», Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρƒ сСгмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ стСка Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° исполнСниС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Вакая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Π°Ρ‚Π°ΠΊ Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, спСцифичны для оборудования ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ стандартныС ΠΊΠ°ΠΊ Π‘, Ρ‚Π°ΠΊ ΠΈ C++ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ элСмСнты с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ

const
Π² памяти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Π‘Π²ΠΎΠ΄ΠΊΠ° Π²Π·Π°ΠΈΠΌΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сСгмСнтов ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Ρ‚Π°Π±Π». 3.1.

Π’Π°Π±Π»ΠΈΡ†Π° 3.1. Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Ρ‹ исполняСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅

ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ адрСсного пространства БСкция исполняСмого Ρ„Π°ΠΉΠ»Π°
Код Text Text
Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Data Data
BSS Data BSS
ΠšΡƒΡ‡Π° Data
Π‘Ρ‚Π΅ΠΊ Stack

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

size
распСчатываСт Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π² Π±Π°ΠΉΡ‚Π°Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· сСкций text, data ΠΈ BSS вмСстС с ΠΎΠ±Ρ‰ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² дСсятичном ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. (ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°
ch03-memaddr.с
ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅; см. Ρ€Π°Π·Π΄Π΅Π» 3.2.5 «ИсслСдованиС адрСсного пространства».)

$ <b>cc -o ch03-memaddr.с -ΠΎ ch03-memaddr</b> /* ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ */

$ <b>ls -l ch03-memaddr</b> /* ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ */

-rwxr-xr-x 1 arnold devel 12320 Nov 24 16:45 ch03-memaddr

$ <b>size ch03-memaddr</b> /* ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² */

text data bss decΒ  hex filename

1458 276Β  8Β Β  1742 6ce ch03-memaddr

$ <b>strip ch03-memaddr</b> /* Π£Π΄Π°Π»ΠΈΡ‚ΡŒ символы */

$ <b>ls -l ch03-memaddr</b> /* Π‘Π½ΠΎΠ²Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ */

-rwxr-xr-x 1 arnold devel 3480 Nov 24 16:45 ch03-memaddr

$ <b>size ch03-memaddr</b> /* Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π΅ измСнились */

text data bss decΒ  hex filename

1458 276Β  8Β Β  1742 6ce ch03-memaddr

ΠžΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π² 12Β 320 Π±Π°ΠΉΡ‚ΠΎΠ² всСго лишь 1742Β Π±Π°ΠΉΡ‚Π°. Π‘ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ этого мСста Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ символы (symbols), список ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. (Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.) ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

strip
удаляСт символы ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Для большой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ дисковоС пространство Ρ†Π΅Π½ΠΎΠΉ нСвозмоТности ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π΄Π°ΠΌΠΏΠ° ядра [40], Ссли Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ появится (На соврСмСнных систСмах ΠΎΠ± этом Π½Π΅ стоит Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅
strip
.) Π”Π°ΠΆΠ΅ послС удалСния символов Ρ„Π°ΠΉΠ» всС Π΅Ρ‰Π΅ большС, Ρ‡Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° содСрТат Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ раздСляСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ. [41]

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

3.2. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти

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

new
ΠΈ
delete
.

НаконСц, ΠΌΡ‹ обсудим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, Π½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

3.2.1. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹:

malloc()
,
calloc()
,
realloc()
,
free()

Π”ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

malloc()
ΠΈΠ»ΠΈ
calloc()
. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Когда Ρƒ вас Π΅ΡΡ‚ΡŒ Π±Π»ΠΎΠΊ памяти ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
realloc()
. ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ освобоТдаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ
free()
.

ΠžΡ‚Π»Π°Π΄ΠΊΠ° использования динамичСской памяти сама ΠΏΠΎ сСбС являСтся Π²Π°ΠΆΠ½ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для этой Ρ†Π΅Π»ΠΈ ΠΌΡ‹ обсудим Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 15.5.2 Β«ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ выдСлСния памяти».

3.2.1.1. ИсслСдованиС подробностСй Π½Π° языкС Π‘

Π’ΠΎΡ‚ объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Ρ‚Π΅ΠΌΡ‹ справки GNU/Linux malloc(3):

#include &lt;stdlib.h&gt; /* ISO Π‘ */

void *calloc(size_t nmemb, size_t size);

Β /* Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нулями */

void *malloc(size_t size);

Β /* Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ */

void free(void *ptr);

Β /* ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ */

void *realloc(void *ptr, size_t size);

Β /* Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти */

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ выдСлСния памяти Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‚ΠΈΠΏ

void*
. Π­Ρ‚ΠΎ бСстиповый ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, всС, Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ β€” это привСсти Π΅Π³ΠΎ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ ΠΈ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ.

Π’ΠΈΠΏ

size_t
являСтся Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Ρ†Π΅Π»Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для динамичСского выдСлСния памяти, ΠΈ Π΄Π°Π»Π΅Π΅ Π² ΠΊΠ½ΠΈΠ³Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ мноТСство ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π΅Π³ΠΎ использования. На Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ соврСмСнных систСм
size
_t являСтся
unsigned long
, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ явно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
size_t
вмСсто простого Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°
unsigned
.