
Π ΠΈΡ. 3.1. ΠΠ΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Linux/Unix
Π₯ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° ΠΈ ΠΊΡΡΠΈ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ, ΠΈ Π»ΡΠ±Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΡΡΠ°ΡΡΠ°ΡΡΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π½Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ, Π² ΠΊΠΎΡΠΎΡΡΡ Π°Π΄ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡ ΡΡΠΊΠΎΠΉ ΡΡΠ΅ΠΊΠ° ΠΈ ΠΊΠΎΠ½ΡΠΎΠΌ ΠΊΡΡΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½. Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π½Π° ΠΏΠ°ΠΌΡΡΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ Π·Π°ΡΠΈΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΡΠ΅ΠΊΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Β«ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡΒ», ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΈ ΡΡΠ΅ΠΊΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ. Π’Π°ΠΊΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²ΠΈΠ΄Ρ Π°ΡΠ°ΠΊ Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Ρ Π΄Π»Ρ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅Π½ΡΡΡΡΡ. Π‘ΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΊΠ°ΠΊ Π‘, ΡΠ°ΠΊ ΠΈ C++ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ
constΠ’Π°Π±Π»ΠΈΡΠ° 3.1. Π‘Π΅Π³ΠΌΠ΅Π½ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅
| ΠΠ°ΠΌΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ | Π‘Π΅Π³ΠΌΠ΅Π½Ρ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° | Π‘Π΅ΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° |
|---|---|---|
| ΠΠΎΠ΄ | Text | Text |
| ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ | Data | Data |
| BSS | Data | BSS |
| ΠΡΡΠ° | Data | |
| Π‘ΡΠ΅ΠΊ | Stack |
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
sizech03-memaddr.Ρ$ <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 filename1458 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 filename1458 276Β 8Β Β 1742 6ce ch03-memaddrΠΠ±ΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΠ°ΠΌΡΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° Π² 12Β 320 Π±Π°ΠΉΡΠΎΠ² Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ 1742Β Π±Π°ΠΉΡΠ°. ΠΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ (symbols), ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. (Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.) ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
stripstripΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠΏΠΎΠΌΡΠ½Π΅ΠΌ ΠΏΠΎΡΠΎΠΊΠΈ (threads), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°. ΠΠ±ΡΡΠ½ΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΠ΅ΠΊ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°, Ρ.Π΅. Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. ΠΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΠΎΠΉ ΡΠ΅ΠΌΠΎΠΉ.
3.2. ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ
Π§Π΅ΡΡΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ Π‘ ΠΡ ΠΎΠΏΠΈΡΠ΅ΠΌ ΡΠ½Π°ΡΠ°Π»Π° ΠΈΡ , Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΠΏΠΎΠ²Π΅ΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Ρ ΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π‘, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΡΡΠ³ΠΈΡ Π²ΡΠ΄Π΅Π»ΡΡΡΠΈΡ ΠΏΠ°ΠΌΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² C++
newdeleteΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ, Π½ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
3.2.1. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ:
malloc()calloc()realloc()free()ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠ°ΠΌΡΡΡ Π²ΡΠ΄Π΅Π»ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ
malloc()calloc()realloc()free()ΠΡΠ»Π°Π΄ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π°ΠΆΠ½ΠΎΠΉ ΡΠ΅ΠΌΠΎΠΉ. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 15.5.2 Β«ΠΡΠ»Π°Π΄ΡΠΈΠΊΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈΒ».
3.2.1.1. ΠΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘
ΠΠΎΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ· ΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²ΠΊΠΈ GNU/Linux malloc(3):
#include <stdlib.h> /* 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_tsizeunsigned longsize_tunsigned