๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
C์ธ์ด์์ ๋์ ๋ฐฐ์ด์ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๊ฒ ํด์ฃผ๋ ๋งค์ฐ ์ ์ฉํ ๊ธฐ๋ฅ์ด๋ค. ๋์ ๋ฐฐ์ด์ malloc, calloc, ๋๋ realloc ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ(Heap) ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํจ์ผ๋ก์จ ์์ฑ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ ์ ์ ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ, ์คํ ์๊ฐ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ ์ฐํ๊ฒ ์กฐ์ ํ ์ ์๊ฒ ํด์ค๋ค.
โญ1. ํ์์ฑ
- ์ ์ฐ์ฑ: ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ ์ ์์ผ๋ฏ๋ก, ์ฌ์ฉ์ ์ ๋ ฅ์ด๋ ๋ค๋ฅธ ์คํ ์๊ฐ ๋ฐ์ดํฐ์ ๊ธฐ๋ฐํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ๊ฐ๋ฅํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ: ํ์ํ ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ง ํ ๋นํ์ฌ ์ฌ์ฉํ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ค์ผ ์ ์๋ค.
โญ2. ๋ฉ๋ชจ๋ฆฌ์ ์ธ ๊ด๋ฆฌ์ ์ฅ์ ๋ฐ ๋จ์
2.1. ์ฅ์
- ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ: ์ ์ ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ, ํ์ํ ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ด ํฅ์๋๋ค.
- ํ์ฅ์ฑ: ํ์์ ๋ฐ๋ผ realloc ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์๋ค.
2.2. ๋จ์
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ถ๋ด: ๋์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ํด์ ํด์ฃผ์ด์ผ ํฉ๋๋ค(free ํจ์ ์ฌ์ฉ). ์ด๋ฅผ ์ํํ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค.
- Fragmentation ๋ฌธ์ : ์ฆ์ ํ ๋น๊ณผ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ฅผ ์ด๋ํ ์ ์์ผ๋ฉฐ, ์ด๋ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์๋ค.
โญ3. ๋ฉ๋ชจ๋ฆฌ์ ๊ตฌ๋ถ
- ์คํ(Stack): ํจ์ ํธ์ถ ์ ์์ฑ๋๋ ์ง์ญ ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ์ ๋๋ค. ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋ค.
- ํ(Heap): ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฌ์ฉ๋๋ ์์ญ์ ๋๋ค. ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ํ ๋นํ๊ณ ํด์ ํด์ผ ํ๋ค.
โญ4. Code
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n;
printf("Enter the number of elements: ");
scanf("%d", &n);
// ๋์ ๋ฐฐ์ด ์์ฑ
arr = (int*)malloc(n * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
// ๋ฐฐ์ด ์ฌ์ฉ
for (int i = 0; i < n; i++) {
arr[i] = i;
}
// ๋ฐฐ์ด์ ์ ์ฅ๋ ๊ฐ ์ถ๋ ฅ
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// ๋ฉ๋ชจ๋ฆฌ ํด์
free(arr);
return 0;
}
์ด ์ฝ๋๋ ์ ์ ๋ก๋ถํฐ ์
๋ ฅ ๋ฐ์ ์ซ์ ๋งํผ์ ๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ํ ๋นํ๊ณ , ๊ฐ ์์์ ๊ฐ์ ํ ๋นํ ํ ์ถ๋ ฅํ๊ณ ๋ง์ง๋ง์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค. ๋์ ๋ฐฐ์ด์ ์ฌ์ฉํจ์ผ๋ก์จ, ํ๋ก๊ทธ๋จ์ ์ ์ฐ์ฑ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค. ๊ทธ๋ฌ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์๋ชปํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํ๋ค.
๋์ ํ ๋น์ ํฌ๊ฒ ์๊ตฌํ๋ ํ๋ก์ ํธ์ ์ฐธ๊ฐํ ์ ์ด ์์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ๊ณต๋ถ๋ฅผ ์ํด ์ ํ์๋ ์๋ค.
'๐ท C์ธ์ด 30๊ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C/C++ Tip] 16. Extern ์ค๋ณต ๋ฌธ์ ํด๊ฒฐ (Include Guard) (0) | 2024.11.02 |
---|---|
[C/C++ Tip] 15. extern ๊ธฐ๋ณธ (0) | 2024.11.02 |
[C/C++ Tip] 13. MCU ์ ์ด๋ฅผ ์ํ ๋นํธ ์ฐ์ฐ (0) | 2024.10.29 |
[C/C++ Tip] 12. ํฌ์ธํฐ๊ฐ ํท๊ฐ๋ฆด ์ ๋ฐ์ ์๋ ์ด์ : ๋ณ(*)์ ์ข ๋ฅ์ ์ ์ฒด (1) | 2024.09.21 |
[C/C++ Tip] 11. C์ธ์ด ํฌ์ธํฐ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ (1) | 2024.09.19 |