메모리 구조

  • CODE(TEXT) SEGMENT
  • HEAP SEGMENT ( L -> H )
  • FREE SEGMENT
  • STACK SEGMENT (H->L) 후입선출
  • DATA SEGMENT ( L -> H )

- Initialized Data Segment

- BSS(Block Started by Symbol)

(전역(extern), 정적변수 0으로 자동 초기화)

위와 같은 변수들은 초기화를 안할 경우에 문제가 생길 수 있기 때문에 존재한다.

High Address

Low Address

 

코드(텍스트) 영역 ( Code(Text) Segment )

  • 코드 자체를 구성하는 메모리 영역

 

  • Hex 파일이나 Bin 파일 메모리

 

  • 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역

 

  • " 문자열 상수를 제외한 지역변수에 할당 "되는 리터럴 상수가 기계어로 저장

 

  • 알고가자!!!
    문자열 상수( "홍길동" ) => Data Seg\Rom 영역
    선언된 지역에 따라 메모리 영역이 다르다.

 

데이터 영역 ( Data Segment )

  • 전역변수와 정적(static) 변수 중 초기화가 할당된 변수가 저장되는 영역

 

  • 변수는 RAM에 저장( Read & Write )

 

  • 변수에 대입하는 초기값은 ROM에 저장

 

  • ROM에 저장된 변수 생성시 복사하여 변수에 할당

 

  • 할당하는 초기값 중 문자열 상수를 제외한 리터럴 상수는 컴파일러에 따라 코드영역에서 복사는 경우도 있다.

 

  • 데이터 영역 - BSS< Block Started by Symbol >
    전역변수 또는 정적 변수 중 초기값이 할당되지 않은 변수가 저장되는 영역

 

  • 메모리를 생성하지 않고 상징적인 변수의 이미지(상징)만 존재

 

  • 프로그램 시작 시 BSS에 저장된 변수들은 0으로 초기 값을 대입

 

  • Data영역으로 이동 / 메모리는 RAM에 할당. 즉, 상징적으로만 존재하는 영역

 

힙 영역 ( Heap Segment )

  • 런타임에 할당하는 동적 메모리가 위치하는 영역

 

  • 크기는 정형화 되어 있지 않고 유동적이고 Free 영역에 가변적으로 크기를 확장

 

  • 동적 할당한 메모리는 식별자(명칭)가 존재하지 않으므로 포인터 변수를 사용해서 접근가능

 

  • 메모리는 낮은 주소에 높은 주소로 할당

 

  • 메모리가 부족할 경우 할당이 실패하여 NULL을 반환

 

  • 런타임에 BSS와 HEAP 사이를 기준 으로 HEAP은 아래로 순차적으로 메모리를 사용한다

 

  • 포인터 변수는 각 지역의 특성에 영향을 받아 생성하고 참조하는 메모리가 HEAP에 존재

 

자유 영역 ( Free Segment )

  • 힙영역과 스택영역의 완충지 역할

 

  • 두 영역이 유동적 일 수 있는 것은 자유영역에 해당 영역의 크기 확장할 수 있다.

 

  • 스택 영역이 Free 영역을 침범해서 Heap 영역을 침범할 경우 StackOverFlow

 

  • 반대의 경우에 Heap 은 NULL 을 리턴

 

스택 영역 ( Stack Segment )

  • 프로그램이 실행 시 자동으로 사용하는 임시 메모리 영역

 

  • 크기는 정형화 되어 있지 않고 유동적이며 Free 영역에서 가변적으로 크기 확장이 가능

 

  • 기본적으로 약 1MB의 크기로 할당

 

  • 지역 변수, 매개 변수, 리턴 값 등 잠시 사용 후 사라지는 유형의 데이터가 저장 되는 영역

 

  • 메모리는 높은 주소에서 낮은 주소로 할당 되며 메모리 부족 시 StackOverFlow 발생

 

메모리 구조는 6가지로 구분된다.
CODE, DATA, BSS, HEAP, FREE, STACK

출처 :

'프로그래밍 > 프로그래밍 기초' 카테고리의 다른 글

바인딩과 바인딩 타임 그리고 할당  (0) 2016.04.21
메모리 관리기법  (0) 2016.03.21

+ Recent posts