메모리 영역이란 프로그래밍에 필요한 데이터가 저장되는 영역을 뜻한다.
메모리 영역은 크게 4가지가 있다
Code(Text) : 명령어(Instruction Code)
Data : 전역변수,static 변수
Stack: 지역변수,매개변수,리턴값 등 프로그래머 할당
Heap : malloc 함수에의해 런타임에 동적으로 할당되는 공간
Data 영역
정적으로 선언된 함수도 포함된다.
상수,전역변수,정적 변수 등등
상수
ex) 1,2,3(숫자 그 자체),"안녕하세요"(문자열 상수)
변수명 앞에 const 가 붙은 변수들
정적(static) 변수의 특징
프로그램이 생성될때 같이 생성되어 프로그램이 종료 될때 소멸한다.
선언시 한번만 초기화 가능
함수 내부에 선언된 Static 변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행 될때 초기화 된다.
가) 초기화 된 데이터는 영역
나) 초기화 되지 않은 데이터 영역 BSS (Block Started Symbol)
*초기화 된 데이터 영역, 비초기화 된 데이터영역을 정적 데이터 영역이라 말한다
Stack 영역
지역변수를 저장하는 영역
코드 실행중 함수부분의 위치에 대해서도 저장
기본적으로 약 1MByte의 공간을 지난다.(1MByte == 1024KByte == 1024*1024Byte)
후입선출(Last In First Out)의 데이터구조를 가지고 있다(스택 정의)
Heap
Stack에 담지 못할 정도로 큰 변수를 생성하여 사용할 때 사용
사용자가 원하는 부분을 할당 받아 사용하기 때문에 사용자가 꼭 해제도 해주어야 한다.
*Code, Data, Heap 영역은 하위 메모리부터 할당되고, stack 영역은 상위 메모리부터 할당 된다.
기억 클래스
지정자 저장 장소 선언위치 범위 파괴시기 초기값
외부변수
외부변수
(extern) 정적 데이터 영역 함수의 외부 프로그램 전체 프로그램 종료시 0
지역변수
지역변수
(auto) 스택 함수의 내부 함수의 내부 함수 종료시 초기화되지 않음
정적변수
정적변수
(static) 정적 데이터 영역 함수의 내부 함수의 내부 프로그램 종료시 0
함수의 외부 프로그램 전체 프로그램 종료시 0
함수의 외부 프로그램 전체 프로그램 종료시 0
register 레지스터 함수의 내부 함수의 내부 함수 종료시 초기화되지 않음
댓글 없음:
댓글 쓰기