BSS 섹션은 초기값이 주어지지 않은 정적 변수들을 효율적으로 관리하기 위한 중요한 영역이다.

  • 컴파일 시 object file에는 해당 변수들의 크기 정보만 기록되어 파일 크기를 줄인다.
  • 실행 시 로더가 메모리에 할당한 후 해당 영역을 0으로 초기화함으로써, C/C++의 암묵적 초기화 규칙과 일치하게 된다. 이러한 방식 덕분에 시스템의 리소스를 효율적으로 사용할 수 있으며, 다양한 플랫폼에서 일관된 동작을 보장할 수 있다.

BSS 섹션의 정의 및 특징

  • 정의
    • BSS 섹션은 초기값이 명시되지 않은 정적(global 또는 static) 변수들을 위한 메모리 영역이다. 변수의 실제 값은 object file에 저장되지 않고, 해당 변수들이 차지할 메모리의 크기 정보만 기록된다.
  • 저장 방식의 장점
    • 초기값이 있는 data 섹션이나 rodata 섹션에 비해 object file의 크기를 줄일 수 있다.
    • 변수 데이터가 없고 크기 정보만 저장되므로, 파일의 불필요한 부피 증가를 억제할 수 있다.

로더에 의한 메모리 할당 및 초기화 과정

  • 메모리 할당
    • 실행 파일 로딩 시 운영체제의 로더는 BSS 섹션에 해당하는 메모리 영역을 할당한다.
  • 초기화 과정
    • Unix-like 시스템과 Windows 모두 기본적으로 BSS 영역을 0으로 초기화한다.
    • 이 초기화 과정 덕분에 C/C++에서 초기화되지 않은 정적 변수는 암묵적으로 0 또는 해당 자료형에 맞는 “0 equivalent” 값으로 설정된다.

C/C++ 언어에서의 활용

  • 암묵적 초기화
    • C 및 C++ 언어 사양에 따르면, 전역 변수와 static 변수는 명시적으로 다른 값으로 초기화하지 않으면 자동으로 0으로 초기화된다.
    • 컴파일 타임에 변수가 BSS 섹션에 배치되고, 실행 시 로더에 의해 0으로 채워지므로 이러한 언어 규약과 맞물린다.

주의사항 및 플랫폼 고려사항

  • 파일 포맷 및 플랫폼 차이
    • BSS 섹션의 동작 방식은 ELF, PE 등 파일 포맷에 따라, 혹은 특정 운영체제의 구현에 따라 약간의 차이가 있을 수 있다.
    • 시스템별 특성을 고려하여 정확한 메커니즘이나 정책을 확인하는 것이 중요하다.

Related

Leave a comment