본문 바로가기

SYSTEM

메모리 영역

728x90
반응형

c언어로 생성된 프로그램은 실행될 때 운영체제가 RAM에 메모리를 할당
→ 크게 4가지로 구성되어있음.


1) code 영역
실제 작동하는 명령어인  오브젝트 코드와   전역 상수가 위치
프로그램이 시작될 때 메모리에 할당되며 프로그램이 종료될 때 해제
기계어로 제어되는 메모리 영역 (Hex파일이나 BIN 파일 메모리)

 


2) data 영역
전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장
프로그램이 실행 될 때 생성되고 프로그램이 종료 되면 시스템에 반환
초기화 된 데이터는 data 영역에 저장 → 초기화 되지 않은 데이터는 BSS 영역에 저장

3) BSS 영역
전역 변수 중  초기화 되지 않은 변수들이 저장되는 공간
전역변수 혹은 모든 비트패턴이 0으로 초기화된 변수 (NULL로 초기화된 변수 등) 
→ C언어에서는 초기화없이 정적으로 할당된 변수는 0(수치데이터의 경우)이나 NULL(포인터의 경우)로 초기화 / 0과 NULL 모두 일반적으로 컴파일러에서는 모든 비트가 0인 비트패턴으로 표현

 


4) stack 영역
프로그램이 자동으로 사용하는 임시 메모리 영역
지역(local) 변수, 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역
함수 호출 시 생성되고, 함수가 끝나면 시스템에 반환
쓰레드 1개가 1개의 스택을 보유하며, 함수가 호출될 때마다 스택의 공간이 일정부분 할당


쓰레드(thread) : 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위


5) Heap 영역
프로그래머가 자유롭게 할당하고 해제하는 메모리 공간
→ 동적으로 메모리를 할당함 / 런타임에 크기가 결정됨
메모리를 아래에서 위로(낮은 주소에서 높은주소)로 할당 
→ 메모리를 할당한 뒤 해제를 해주지 않으면 메모리 누수가 발생

728x90
반응형

'SYSTEM' 카테고리의 다른 글

쉘코드를 널(\x00) 없이 제작 / getuid setreuid 추가  (0) 2023.01.05
리틀엔디안, 빅엔디안  (0) 2023.01.05
함수 호출 규약 (Calling Convention)  (0) 2023.01.05
파일 디스크립터, 실습  (0) 2023.01.05
패킹, 언패킹  (0) 2023.01.05