2012-01-20 3 views
0

bss 세그먼트에는 초기 값으로 0을주는 초기화되지 않은 변수가 들어 있지만 데이터 세그먼트를 저장하는 데 사용하지 않는 이유는 무엇입니까?bss 세그먼트의 유틸리티는 무엇입니까?

os loader가 memset을 호출하여이 모든 변수를 한 번에 초기화하므로 실행 속도가 빨라지는 것을 읽었지만 로더가 memset을 호출하여 데이터 세그먼트에서도 초기화 할 수 있으므로 확신 할 수 없습니다!

+0

로더는 데이터 세그먼트의 어떤 부분에 초기화해야 할 데이터가 있는지 어떻게 알 수 있습니까? 종종 실제로는 메모리를 지우는 로더가 아니라 응용 프로그램과 링크되어'main' (C 런타임 또는 CRT라고 함) 호출 전에 실행되는 루틴입니다. –

답변

2

거대한 세트의 초기화되지 않은 값이있을 수 있습니다. 이진을 0으로 채우거나 그 값에 대해서는 뭔가이 있어야합니다.) 그 목적으로 데이터 섹션을 사용하려면이 바이너리를 채워야합니다. 실행 파일에 메가 바이트 0을 추가한다고 가정 해보십시오 ...

+0

짧은 버전 : 실행 파일의 공간을 절약 할 수 있습니다. – ams

+0

나는 컴파일러가 실행 파일에서 그들을 그룹화해야하는 이유를 이해하지만 os loader가 메모리의 분리 된 논리 세그먼트에 이들을 저장하는 이유는 !!! –

+0

@Pindexis 나는 따라하지 않는다. 물론로드 할 때 두 세그먼트를 쉽게 병합 할 수 없습니다. 자연스럽게 두 개의 서로 다른 위치에로드합니다. 어쨌든 그것은 큰 문제가 아닙니다. –