더북(TheBook)

add()라는 함수를 정의하였습니다(#1). 함수 정의는 컴파일을 거치면서 인스트럭션이 되고, 이 인스트럭션은 프로세스가 실행되면서 코드 세그먼트에 올라갑니다. 전역 변수로 선언된 global_x는 데이터 세그먼트에 올라갑니다(#2). local_x는 메인 함수(메인 함수도 함수입니다)의 지역 변수이므로 스택 세그먼트의 스택 프레임에 생성됩니다(#3).

#4는 힙 세그먼트에 4바이트의 메모리를 할당하는 코드고, #5는 메모리를 해제하는 코드입니다. malloc() 함수는 인자로 받은 바이트 수만큼 힙 세그먼트에 메모리를 할당합니다(#4). free() 함수는 할당된 메모리를 해제합니다(#5). 이처럼 힙 세그먼트를 사용하면 메모리의 할당과 해제 시점을 프로그래머가 정할 수 있습니다. 또한 할당한 메모리를 해제하지 않고 메모리 주소 값을 참조나 리턴으로 전달하면 언제 어디서든 접근할 수 있습니다. 이러한 특징은 힙 세그먼트의 큰 장점입니다. 하지만 장점만큼 단점도 큽니다. 힙 세그먼트의 단점을 살펴보겠습니다.

malloc() 함수로 메모리를 할당할 때 메모리가 들어갈 만한 충분한 공간을 찾는데, 이때 메모리 공간이 부족하면 찾을 때까지 검색을 이어갑니다. 이러한 이유로 malloc() 함수는 굉장히 느립니다. 메모리 할당 위치를 단번에 알 수 있는 스택과 달리 메모리 공간을 탐색해야 하기 때문입니다. 성능을 고려할 때 힙을 반드시 사용해야 하는 게 아니라면(분명한 이유가 있지 않다면) 스택을 적극적으로 활용하는 게 좋습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.