개발자 최승준

메모리 데이터 영역, Data, BSS 본문

프로그래밍/C언어

메모리 데이터 영역, Data, BSS

개발자 최승준 2024. 1. 3. 20:06

 

메모리 레이아웃에서 데이터 영역은 두가지로 나누어진다.

일반적으로 Data 영역은 초기화된 전역 변수들과 정적 변수들이 저장되는 영역이다.

BSS(Block Started by Symbol) 영역은 초기화되지 않은 전역 변수들과 정적 변수들이 할당되는 영역이다.

 

초기화된 변수들이 있는 Data 영역은 값을 설정하고 메모리에 저장해둔다.

하지만 BSS 영역은 프로그램 시작 전에 메모리에 할당할 필요는 없기에, 데이터의 크기만 저장해뒀다가 프로그램이 시작되고 모두 0으로 초기화해준다.

즉 프로그램 영역은 BSS를 제외한 Text, Data 영역이 된다.

 

 

출처 : ACE Lab

 

 

프로그램이 실행되면 Secondary Memory, ROM에서 텍스트와 데이터를 Main Memory, RAM 으로 옮긴다.

위 코드 그림에서 a 는 초기화되었기에 데이터 영역.

b는 초기화되지 않은 전역 변수이므로 bss 영역에 할당된다.

프로그램이 실행되어 RAM으로 옮겨지면 0으로 자동 초기화한다.

 

c는 main함수의 지역변수이므로 스택에 저장된다.

“string”은 상수 값이므로 텍스트 영역에 저장되어있다가, d의 값을 초기화할 때 들어간다.

 

상수 값과 텍스트 영역에 관한 설명은 아래글에 있다.

 

https://ecofreenavigator.tistory.com/32

 

C언어 문자열 다루기

C언어에서 문자열을 사용할 때 2가지 방법을 사용해서 다룬다. char s[] = “hello”; char *s = “hello”; 위의 “hello\0”는 상수 값이므로 메모리에서 텍스트 영역에 저장되어 있다. 1) 코드가 실행되면

ecofreenavigator.tistory.com