2011-10-26 3 views

답변

7

.bss는 "메모리"를 사용하지만 실행 파일 내의 공간은 사용하지 않습니다. 그 유일한 목적은 제로 - 초기화 된 데이터를 보유하는 것입니다 (아시다시피).

. 데이터 (및 rodata와 같은 관련 섹션)는 실제로 실행 파일 내의 공간을 소비하며 대개 문자열, 정수 및 전체 개체까지 포함합니다.

일반 프로그램에는 초기화되지 않은 데이터가 많이 있으므로 출력 파일에서 추가 공간을 차지하지 않도록하는 것이 중요한 보너스입니다.

다중. * 데이터 섹션의 경우 ... .rodata/.data는 메모리 보호를위한 힌트로 사용할 수 있습니다 (.rodata를 덮어 쓰지 못하게하고 .data에 대한 읽기/쓰기 허용).

+0

몇 가지 예를 들려 줄 수 있습니까? 메모리보기, asm 지시 등. – Bruce

+3

@ Bruce : 런타임에는 기본적으로 .data와 .bss간에 차이가 없습니다. 차이점은 링커 출력 (한 섹션은 디스크에 있고 다른 섹션은 디스크에 존재하지 않음)과 실행 가능 로더가 섹션을로드하는 방법입니다. .data는 복사입니다. 로더가 memcpy를 사용할 수 있습니다 ... .bss가 0입니다. 로더가 memset을 사용할 수 있습니다. –

관련 문제