๐พ C์ ๋ฉ๋ชจ๋ฆฌ ๋์ ํ ๋น
- ์ปดํ์ผ ํ์
→ Data ์์ญ๊ณผ Stack ์์ญ์ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ ๊ฒฐ์ - ๋ฐ ํ์ (ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ์ค)
→ ํ ์์ญ์ ํฌ๊ธฐ ๊ฒฐ์
๋ฐ ํ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ๋์ ํ ๋น์ด๋ผ๊ณ ํ๋ค.
๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ํ์ํ ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ฃผ๋ ๊ฒ์ด๋ค.
C์ธ์ด์์ ๋ฉ๋ชจ๋ฆฌ ๋์ ํ ๋น์ ํด์ฃผ๊ธฐ ์ํด malloc() ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๐ malloc() ํจ์
Memory + Allocation ์ ๋จ์ด๊ฐ ํฉ์ณ์ง malloc()์ C์ธ์ด์์ ๋ฉ๋ชจ๋ฆฌ์ ๋์ ํ ๋น์ ํด์ฃผ๋ ํจ์์ด๋ค.
malloc() ํจ์์ ์ํ์ ๋ค์๊ณผ ๊ฐ๋ค.
#include <stdlib.h>
void *malloc(size_t size);
๋์ ํ ๋น์ ํ๊ธฐ ์ํ ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ #include <stdlib.h> ํค๋๋ฅผ ์ ์ธํด์ฃผ์ด์ผ ํ๋ค.
malloc() ํจ์๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ์ ๋ฌ ๋ฐ๋๋ค.
๋ฐ๋ผ์ size ๋งค๊ฐ ๋ณ์๋ ํ ๋นํ๋ ค๋ ๋ฐ์ดํธ ์๋ฅผ ๋ํ๋ธ๋ค.
malloc()์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฑ๊ณตํ๋ฉด, ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค.
์ด ํฌ์ธํฐ๋ void ํฌ์ธํฐ์ด๋ฏ๋ก ํ์ํ ๋ฐ์ดํฐ ํ์์ผ๋ก ํ๋ณํํ์ฌ ์ฌ์ฉํด์ผ ํ๋ค.
๐ free() ํจ์
๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ํ ๋นํด์ฃผ๋ฉด ๋ฐ๋์ free() ํจ์๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํด์ ํด์ผ ํ๋ค.
์ด๋ ํด์ ๋ฅผ ํด์ฃผ์ง ์์์ ์, ๋ฉ๋ชจ๋ฆฌ ๋์(memory leak)๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
free([๋์ ํ ๋น์ด ๋ ๋ณ์ ์ด๋ฆ])
๐งช malloc() ์ฌ์ฉํด๋ณด๊ธฐ
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int N = 0;
// ๋ฐฐ์ด ํฌ๊ธฐ ์
๋ ฅ ๋ฐ๊ธฐ
scanf("%d", %N);
// ๋ฉ๋ชจ๋ฆฌ ํ ๋น
arr = (int *)malloc(N * sizeof(int));
if (arr == NULL) {
printf("๋ฉ๋ชจ๋ฆฌ ํ ๋น ์คํจ!\\n");
}
// ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๋ฃ์ด ์ฌ์ฉ
for (int i = 0; i < N; i++) {
arr[i] = i;
}
// ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ํด์
free(arr);
}
์๋ ๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ์ ๋ ฅ ๋ฐ๊ณ , malloc() ์ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ํ ๋น ์์ผ์ฃผ๋ ์ฝ๋์ด๋ค.
malloc() ํจ์๊ฐ ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ์ดํด๋ณด์.
// ๋ฉ๋ชจ๋ฆฌ ํ ๋น
arr = (int *)malloc(N * sizeof(int));
- N * sizeof(int) : intํ(4 byte) ์ด๋ฏ๋ก ๋ฐฐ์ด ํฌ๊ธฐ ๋งํผ ๊ณฑํ๋ค.
- ๋ฐํ๋ ํฌ์ธํฐ๋ฅผ intํ ํฌ์ธํฐ๋ก ํ๋ณํ ํ๋ค.
- arr ๋ณ์์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฅํ๋ค.
๐ก sizeof() ๋ฅผ ์ด์ฉํด byte ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํด ํ ๋น์ ํด์ค ์ ์๋ค.
'Programming Language > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C์ธ์ด] ๋ฐฑ์ค 10810๋ฒ : ๊ณต ๋ฃ๊ธฐ (1) | 2023.09.14 |
---|---|
[C์ธ์ด] ๋ฐฑ์ค 2562๋ฒ : ์ต๋๊ฐ (0) | 2023.09.14 |
[C์ธ์ด] ๋ฐฑ์ค 10818๋ฒ : ์ต์, ์ต๋ (0) | 2023.09.12 |
[C์ธ์ด] Call By Value & Call By Reference (0) | 2023.06.16 |
C ํฌ์ธํฐ(Pointer) (1) | 2023.06.07 |