메모리 영역 type
Code 영역: 프로그램 명령 코드 자체를 저장하는 메모리 영역으로, Hex(16진수) 파일이나 BIN(2진수) 파일이 저장되는 영역
Data 영역: 전역변수, 정적변수, 배열, 구조체 등 valid한 값들로 초기화된 변수들이 저장되는 영역
초기화 되지 않은 변수는 BSS(Blocked Stated Symbol)영역(= .ZI영역, 0으로 초기화된)에 저장
Heap 영역: malloc(), new() 같은 동적인 메모리를 할당할 때 위치하는 메모리 영역 -> 힙의 경우 하위주소에서 상위주소로 할당을 진행
Stack 영역: 지역변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 임시 데이터를 저장하는 영역 -> 스택의 경우 상위주소에서 하위 주소로 할당을 진행
data영역과 bss 영역을 구분하는 이유는 무엇인가?
-> 초기화되지 않은 변수는 프로그램이 실행될 때 영역만 잡아주면 되고 그 값을 프로그램에 저장하고 있을 필요는 없으나, 초기화가 되는 변수는 그 값도 프로그램에 저장하고 있어야 하기 때문이다. 따라서 bss 영역 변수들이 많아져도 프로그램의 실행코드 사이즈를 늘리지 않는다.
System 관점에서 본 memory
ROM은 Code, Data section으로 구성되어
- text영역에는 boot loader등 시스템을 초기화 하고, OS load 하는 등의 역할을 하는 프로그램 code가 저장되며 RO
- data 영역에는 위 영역에 저장된 code가 전역변수나 정적변수 등 R/W로 사용할 수 있는 영역
이후 RAM에 OS, 프로그램이 올라가게 되면 Code영역과 Data 영역을 copy해서 사용. 임베디드 시스템의 경우 그대로 rom의 text 영역에 있는 프로그램 code를 사용하기도 함.
300x250
'CS' 카테고리의 다른 글
Process & Thread (0) | 2024.08.09 |
---|