2015년 8월 25일 화요일

C 언어 - heap 메모리

메모리 구역


메모리 구역은 stack 과 heap 메모리 영역으로 나뉜다.

이제껏 stack 영역에 변수를 선언했다.
가장 큰 특징은 변수 선언만 하고 해제는 자동으로 되기 때문에 신경쓰지 않아도 된다.

heap 메모리 영역은 개발자가 메모리 할당과 해제를 신경써야 한다.

#include <stdio.h>
#include <stdlib.h>
int main() {
    char * p = (char*)malloc(5);
    char * a = p;
    *(a++) = 1;
    *(a++) = 2;
    *(a++) = 3;
    *(a++) = 4;
    *(a++) = 0;
    a = p;
    while (*a) {
        printf("%d\n", *a);
        a++;
    }
    free(p);
    return 0;
}

실행:
1
2
3
4

  • malloc() : 입력한 숫자 (바이트 단위) 만큼 heap 메모리를 할당한다.
  • free() : 할당한 메모리를 해제한다.

주의 사항
할당한 메모리는 사용이 끝나면 반드시 해제해 줘야 한다.
당연하게도 메모리 사용 한도가 존재하기 때문에 자칫 메모리 해제를 놓치게 된다면 과도한 메모리 사용으로 인해 성능이 저하되거나 프로세스가 멈출 수 있다.

성능 문제

힙 메모리를 할당하고 해제하는 작업은 생각보다 시간을 할애하는 작업이기 때문에 과도한 힙 메모리 할당/해제 작업은 고민을 해야 한다.


댓글 없음:

댓글 쓰기