동적메모리할당(힙, sbrk, malloc, free)

ORCASUIT·2023년 11월 10일

동적 메모리 할당은 프로그램 실행 중에 메모리의 할당 및 해제를 허용하는 프로세스입니다. 이는 특히 프로그램이 실행되는 동안 필요한 메모리 양이 변동될 때 유용합니다. 동적 메모리 할당은 주로 '힙'이라고 불리는 메모리 영역에서 이루어집니다.

힙 (Heap)

힙은 프로그램의 데이터를 동적으로 저장하기 위한 메모리 영역입니다. 전역 변수나 정적 변수와 달리, 힙 영역의 메모리는 프로그램의 수명과 독립적으로 존재합니다. 즉, 프로그래머가 직접 관리해야 하며, 사용이 끝난 메모리는 명시적으로 해제해야 합니다. 힙을 사용하여 할당된 메모리는 '동적 변수' 또는 '힙 변수'라고 합니다.

sbrk()

sbrk 함수는 힙 영역의 크기를 변경하기 위해 UNIX 시스템 호출로 사용됩니다. 이 함수는 힙의 끝을 옮겨 메모리를 할당하거나 해제합니다. sbrk(0)을 호출하면 현재 힙의 끝 주소를 반환합니다. 양의 인자를 주어 호출하면 힙을 확장하고, 음의 인자를 주어 호출하면 힙을 축소합니다.

malloc()과 free()

C 프로그래밍 언어에서 malloc (memory allocation) 함수는 힙에 특정 크기의 메모리 블록을 할당하기 위해 사용됩니다. malloc은 할당된 메모리 블록의 포인터를 반환하며, 이 포인터는 할당된 메모리에 접근하기 위해 사용됩니다.

free 함수는 malloc에 의해 할당된 메모리를 해제합니다. 프로그램이 malloc으로 할당한 메모리를 더 이상 사용하지 않을 때, 해당 메모리를 해제하기 위해 free를 호출해야 합니다. 이는 메모리 누수(memory leak)를 방지하는 중요한 과정입니다.

메모리 누수 (Memory Leak)

메모리 누수는 프로그램이 동적으로 할당한 메모리를 적절히 해제하지 않을 때 발생합니다. 이로 인해 사용하지 않는 메모리가 시간이 지남에 따라 계속 쌓이게 되고, 이는 시스템의 성능 저하 또는 크래시를 초래할 수 있습니다.

동적 메모리 관리의 중요성

동적 메모리 관리는 자원이 제한된 시스템에서 특히 중요합니다. 효율적으로 메모리를 관리하면 최적의 성능을 달성할 수 있습니다. 프로그래머는 동적으로 할당된 메모리를 적절히 관리해야 하며, 사용하지 않는 메모리는 항상 해제해야 합니다. 잘못된 메모리 관리는 메모리 누수, 메모리 손상, 프로그램 오류 등을 초래할 수 있습니다.

0개의 댓글