메모리는 주기억장치(RAM)와 보조기억장치(HDD, SDD)로 나뉜다
보조기억장치는 저장 공간이 크지만 프로그램 실행을 위해 data를 가져오는 속도가 느리기 때문에 실행 속도가 저하된다.
이를 위해 프로그램 실행 시 필요한 data만 RAM에 load하여 CPU에 빠르게 접근할 수 있도록 한다. RAM이 없다면 CPU가 매번 HDD, SSD에서 data를 읽어야 하므로 비효율적이다.
그렇기 때문에 프로그램을 효율적으로 실행하기 위해 RAM이 필요하다.
RAM의 구성 요소 (Memory Segmentation)
Code segment
실행할 프로그램의 기계어 코드( 작성한 코드의 Binary code 형태, 예: 10110000 01100001 11001010 ... )가 저장되며, 보통 Read-only로 설정된다.
Date segment
Global variables(함수 밖에 선언되어, 모든 함수에서 접근 가능한 변수)와 Static variables(함수 안에서 선언되면, 함수가 다시 선언되어도 변수는 남아있고, 함수 밖에서 전역 변수를 static하게 선언하면 파일 내에서만 접근할 수 있다.)을 저장하며, Local variables와 다르게 프로그램이 종료될 때까지 유지된다.
초기값이 있는 데이터 .data와 초기화되지 않은 데이터 .bss로 구분된다.
Heap segment
dynamically allocated memory가 저장된다. size가 변하며 꼭 free를 해줘야 한다.
Stack segment
Lacal variables, return address, 함수 호출 정보 등이 저장된다. recursion 호출이 많거나, 너무 많은 data를 stack에 저장하면 stack overflow가 발생할 수 있다.
'학부 수업 내용 정리 > 자료구조' 카테고리의 다른 글
Array (0) | 2025.03.12 |
---|---|
Recursion (0) | 2025.03.12 |
동적할당을 왜 하는 걸까요? (0) | 2024.09.28 |
문자열 리터럴(string literal)에 대한 이해 (0) | 2024.08.01 |
변수와 리터럴의 차이 (0) | 2024.07.30 |