1. 개요
Block Started by Symbol컴퓨터과학에서 사용되는 용어.
일반적으로 영문 이니셜은 대문자로 적기에 대문자 BSS로 적는 것이 옳음에도 불구하고 소문자 bss로 된 문서들이 많이 보이는 이유는, 일부 어셈블리어 코드에서 각 섹션의 시작을 ".text", ".data", ".bss" 로 소문자로 쓰기 때문에 실제로 어셈블리어 코드를 보는 사람들에게는 소문자 bss 가 익숙하다. 그래서 영문 약자(略字)임에도 불구하고 소문자로 된 항목이 많다. 물론 각 교과서의 해당 영역에 대한 기술 및 기타 일반적인 상황에서는 당연히 대문자 BSS로 쓴다.
2. 상세
이 영역은- 초기화 되지 않은
- 초기화를 0으로 한
- 초기화를 Null로 한 포인터
왜 초기값이 0이나 NULL이 아닌 값으로 설정된 data 영역과[1] 이런 식으로 초기화를 하지 않은 변수들을 위한 공간을 따로 만들어서 구분이 필요한 이유는, 전체 프로그램의 크기를 작게 만들 수 있기 때문이다.
대부분의 용량 걱정할 필요 없는 PC에 탑재되는 프로그램과는 달리 임베디드 시스템에 탑재되는 프로그램의 경우, 작은 ROM 안에 프로그램을 욱여넣어야 하는 경우가 많이 있는데 초기값이 주어진 data영역에 들어가는 변수들은 변수마다 값을 넣어주는 공간만큼 용량을 차지하지만, 초기화 되지 않은 bss에 들어가는 변수들은 그 값을 넣어줄 필요가 없기에 그냥 변수가 있다! 라고만 해 주면 된다. 따라서 변수의 값을 써 넣을 필요가 없으며 그만큼 프로그램의 용량이 작아지게 된다.
프로그램 실행 시, crt0등에 의해서 bss가 확보된다. 자세한 내용은 참조
[1] 예를 들어 static int A = 10; 처럼 값을 넣어 초기화를 할 경우, data영역에 들어간다.