달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  1. 코드 영역 : 함수 및 상수가 저장 됌. main함수가 있는 곳이다. 프로그램의 실행명령이 있는 곳. 나머지 4영역들은 프로그램의 데이터가 있는 곳이다. RO (Read Only) 영역이라고도 하는데, 그 이유는 프로그램 실행 시에 데이터가 있는 영역의 값만 변경되고, 코드영역 자체의 값은 변경되지 않기 때문이다.
  • 함수의 메모리 주소는 있으나 상수의 메모리 주소는 없다
  1. 데이터 영역: 전역변수 중에 초기화가 된 변수들이 있는 곳이다. 전역변수 inum=1; Static int num=1;
  2. BSS 영역: 전역변수 중에 초기화가 안 된 변수들이 있는 곳이다. 전역변수 inum; Static int num;

주소를 출력해 보면 2번과 3번의 주소가 인접해 있으나 다른 영역임을 알 수 있다. 임베디드 에서는 심볼 0으로 초기화 되어 있다 하여 ZI (zero initialization)이라 부른다.

  1. 힙 영역: 동적할당 (추후 상세 설명)
  2. 스택 영역: 지역변수 (추후 상세 설명)

 

프로그램 실행명령 (아이콘 더블클릭) -> 코드 영역, 데이터 영역, BSS 영역들이 메모리에 복사되어 순차적으로 처리된다.

이 영역들의 데이타는 컴파일 단계에서 생성된다.

반면 힙 영역과 스택 영역들의 데이타는 실행과정에서 생성된다.

 

  • Static 변수 : 소속된 함수 내에서만 접근 가능하나, 그 외는 전역변수의 속성을 가진다. 즉, 이전 접근에서 변경한 값이 그대로 유지된다 (아래 코드에서 static 변수 inum1++ 참고).

 

이상으로 20140324 01 메모리 구조, 메모리 주소, 코드영역, 데이터영역, BSS 영역, 전역변수, static 변수에 대하여 알아보았다.

 

 

Posted by C언어 보이
|