[C μΈμ΄] malloc κ³Ό free λ‘ λ©λͺ¨λ¦¬ κ΄λ¦¬νκΈ°

λ©λͺ¨λ¦¬ ꡬ쑰
C μΈμ΄κ° λ§μ μ¬λμ λ°λ μ΄μ λ λ°λ‘ λ©λͺ¨λ¦¬κ° μλκΉ μκ°νλ€κ³ 첫 μκ°μ μ΄μΌκΈ°λ₯Ό νμλ€.
μ€λμ C μΈμ΄μ ν΅μ¬ μ€ νλμΈ λ©λͺ¨λ¦¬ κ΄λ¦¬μ κΈ°λ³Έμ λν΄μ μμ보λλ‘ νκ² λ€.
κ·Έ μ μ λ¨Όμ λ©λͺ¨λ¦¬μ ꡬ쑰μ λν΄μ μμμΌνλλ°, λ©λͺ¨λ¦¬ ꡬ쑰λ μ΄ 4κ°λ‘ λλμ΄ μ§λ€.
- μ€ν μμ
- ν μμ
- λ°μ΄ν° μμ
- μ½λ μμ

μ¬κΈ°μ μ€νκ³Ό νμ μ£Όλͺ©μ ν΄λ³Ό νμκ° μλ€.
μ€ν μμ
μ»΄νμΌ μμ μ λ©λͺ¨λ¦¬κ° κ²°μ λμ΄ μ€ν μλκ° λΉ λ₯΄κ³ λλΉκ° μλ€λ νΉμ§μ΄ μλ€.
νμ§λ§ μ€ν μμμ μλμ μΌλ‘ νκ³κ° μκΈ° λλ¬Έμ μ€ν μ΄μμ μ°κ²λλ€λ©΄ μλ¬κ° λ°μν κ°λ₯μ±μ΄ μ‘΄μ¬νλ€.
ν μμ
μ¬μ©μκ° μ§μ μμ±νλ νΉμ ν λΉνλ λ©λͺ¨λ¦¬ 곡κ°μ΄λ€.
Java μμλ GCκ° λμνμ¬ νμ½νλ 곡κ°μ΄λΌκ³ μκ°ν μ μλ€.
νμ μ΅μ νλ₯Ό ν λλ μ¬μ©λλ©° μ€νλ³΄λ€ ν° λ°μ΄ν°λ₯Ό ν λΉν λλ μ¬μ©λκΈ΄ νμ§λ§ μ¬μ©μκ° μ§μ λ§μ§ μ μλ 곡κ°μ΄κΈ° λλ¬Έμ μ무λλ ν μμμ΄ λ°μνκΈ° μ½λ€.
C μΈμ΄μμ λ©λͺ¨λ¦¬ μ¬μ©νκΈ°
c μΈμ΄μμ λ©λͺ¨λ¦¬λ₯Ό μ‘°μν λλ mallocκ³Ό free λ₯Ό μ΄μ©νλκ² μΌλ°μ μ΄λ€.
- malloc μΌλ‘ λ©λͺ¨λ¦¬ ν λΉνκΈ°
- μ¬μ©νκΈ°
- free λ‘ ν λΉλ°μ λ©λͺ¨λ¦¬ ν΄μ νκΈ°
μ κ³Όμ μ κ±°μΉκ² λλλ°, μ’ λ μμΈν μμ보μ
mallocκ³Ό free
mallocκ³Ό free μ κ°μ λ©λͺ¨λ¦¬ κ΄λ ¨ ν¨μλ stdlib.h ν€λμ μ‘΄μ¬νλ―λ‘ malloc, free, memcpy, memset μ μ¬μ©νλ €λ©΄ ν΄λΉ ν€λλ₯Ό include ν΄μΌ νλ€.
malloc
λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°λ ν¨μλ‘ Memory + Allocationμ ν©μ± μ½μλ‘ λ©λͺ¨λ¦¬ 곡κ°μ ν보νκ³ λ©λͺ¨λ¦¬ λΈλ‘μ ν λΉνλ€.
malloc ν¨μλ₯Ό μ¬μ©ν λ λ§€κ°λ³μλ‘ size λ₯Ό μ§μ νμ¬ μ¬μ©μκ° μΌλ§νΌμ λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°μ κ²μΈμ§ λͺ μν΄μΌ νλ€.
free
μμμ λ³Έ malloc μΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν λΉνλ€λ©΄ Heap μμμ λ°μμν€μ§ μκΈ° μν΄μ λ©λͺ¨λ¦¬λ₯Ό ν΄μ μμΌμΌ νλ€.
λ§μ½ λ©λͺ¨λ¦¬ ν λΉμ ν΄μ νμ§ μμΌλ©΄ νμ ν λΉμμ μλ¬λ₯Ό λ°μμν¬ μ μμΌλ―λ‘ μ μ νκ² λ©λͺ¨λ¦¬λ₯Ό ν΄μ μμΌμΌ νλ€.
#include <stdlib.h>
#include <stdio.h>
int main() {
int number = 100;
int *pointer1 = &number;
int *pointer2 = malloc(sizeof(number));
printf("address: %010x \n", pointer1);
printf("address: %010x \n", pointer2);
free(pointer2);
return 0;
}
λ©λͺ¨λ¦¬μ κ°μ μ μ₯νκΈ°
μμ μ½λμμλ λ©λͺ¨λ¦¬λ₯Ό ν λΉ νκ³ ν΄μ νλ κ³Όμ μ΄μλ€.
μ΄λ²μλ ν λΉλ°μ λ©λͺ¨λ¦¬μ μμ°Έμ‘°λ₯Ό μ΄μ©νμ¬ νΉμ κ°μ μ μ₯ν΄λ³΄μ.
#include <assert.h>
#include <stdlib.h>
int main() {
int number = 100;
int *pointer1 = &number;
int *pointer2 = malloc(sizeof(number));
*pointer2 = number;
assert(*pointer1 == *pointer2);
free(pointer2);
return 0;
}