728x90

힙(Heap)과 스택(Stack)은 프로그램이 메모리를 사용하는 두 가지 주요 영역이다.

 

: 동적으로 할당되는 메모리 영역. 프로그래머가 직접 관리하며, 필요할 때 메모리를 할당하고 사용이 끝나면 해제한다. 힙은 메모리 할당과 해제가 자유롭기 때문에 스택보다 유연하지만, 메모리 누수나 단편화 같은 문제가 발생할 수 있다. 힙은 크기가 고정되어 있지 않고 프로그램 실행 동안 확장될 수 있다.

 

스택: 자동으로 할당 및 해제되는 메모리 영역. 함수 호출 시 생성되는 지역 변수와 함수 매개변수가 저장된다. 스택은 LIFO(Last In, First Out) 방식으로 작동한다. 함수가 호출되면 스택 프레임이 스택에 푸시되고, 함수가 종료되면 스택 프레임이 팝되어 메모리에서 제거된다. 스택은 크기가 고정되어 있으며, 스택 오버플로우가 발생할 수 있다.

 

주요 차이점:

  • 스택은 컴파일러에 의해 자동으로 관리되며, 힙은 개발자가 직접 관리해야 한다.
  • 스택은 정적/자동 할당이고, 힙은 동적 할당이다.
  • 스택에 할당된 메모리는 함수 호출이 끝나면 자동으로 해제되지만, 힙에 할당된 메모리는 명시적으로 해제하지 않으면 프로그램 종료 시까지 남아 있다.
  • 스택은 제한적인 반면, 힙은 더 크고 유연하다.
  • 스택은 힙에 비해 더 빠른 할당과 해제가 가능하다.

 

코드 영역: 프로그램의 실행 가능한 기계어 코드가 저장되는 곳이다. 이 영역은 읽기 전용으로 설정되어 있어, 프로그램 실행 중에는 변경되지 않는다. 함수, 루프, 조건문 등의 실제 프로그램 코드가 여기에 위치한다.

 

데이터 영역: 프로그램의 전역 변수와 정적 변수(static variables)가 저장되는 영역이다. 이 영역에 저장되는 변수들은 프로그램의 생명 주기 동안 초기화된 값으로 유지되며, 프로그램 실행 도중에도 값이 변경될 수 있다. 데이터 영역은 두 부분으로 나뉘는데, 초기화된 데이터를 위한 영역과 초기화되지 않은 데이터를 위한 BSS 영역이 그것이다.

 

BSS 영역: 초기화되지 않은 전역 변수와 정적 변수가 저장되는 영역이다. BSS 영역에 있는 변수들은 프로그램이 시작할 때 0 또는 null 값으로 초기화된다. 이 영역의 목적은 메모리 사용을 최적화하기 위한 것으로, 실제로 프로그램에 필요한 메모리 공간만 할당하면서, 초기값이 필요 없는 변수들을 효율적으로 관리한다.

 

프로세스와 스레드는 메모리에 적재된다. 프로세스는 실행 중인 프로그램의 인스턴스로, 자신만의 메모리 공간(코드, 데이터, 힙, 스택 등)을 가진다. 스레드는 프로세스 내에서 실행되는 실행 단위로, 프로세스의 메모리 공간을 공유하지만 자신만의 스택을 가진다. 이를 통해 스레드 간의 데이터 공유와 통신이 용이하다.

 

프로세스간 통신(IPC, Inter-Process Communication)은 독립적인 프로세스들이 데이터를 주고받거나 동기화하는 방법이다.

  1. 파이프(Pipes): 단방향 통신 채널. 데이터는 한쪽 끝으로 들어가 다른 쪽으로 나온다.
  2. 명명된 파이프(Named Pipes): 이름을 가진 파이프로, 두 프로세스가 서로 다른 컴퓨터에 있어도 통신 가능.
  3. 메시지 큐(Message Queues): 메시지 기반의 통신 방식. 프로세스는 메시지 큐에 데이터를 쓰거나 읽음.
  4. 세마포어(Semaphores): 프로세스 동기화에 사용. 공유 자원에 대한 접근을 제어.
  5. 공유 메모리(Shared Memory): 프로세스들이 데이터를 공유하기 위해 메모리의 동일한 부분을 사용.
  6. 소켓(Sockets): 네트워크를 통한 프로세스 간 통신을 가능하게 함. 서버와 클라이언트 모델을 사용.

각 기법은 사용 상황과 요구 사항에 따라 선택된다. 예를 들어, 실시간 데이터 교환은 소켓이나 메시지 큐를 사용하며, 큰 데이터 블록의 공유는 공유 메모리가 적합하다. 동기화와 순서 보장이 중요할 때는 세마포어나 메시지 큐를 고려한다.

 

yunsejin 폴더에 stack와 queue 구현 코드가 있음 

 

GitHub - yunsejin/Data-Structure-C-Language-Exercises: NANYANG UNIVERSITY Data-Structure-Exercises

NANYANG UNIVERSITY Data-Structure-Exercises. Contribute to yunsejin/Data-Structure-C-Language-Exercises development by creating an account on GitHub.

github.com

 

728x90

+ Recent posts