6
프로세스 범위 변수에 대해 .data 및 .bss의 두 섹션을 갖는 이점은 무엇입니까? 왜 그냥 가지고 있지 않아? 나는 각 섹션이 사용되는 것을 안다. 나는 gcc를 사용하고있다..bss 섹션을 사용하면 어떤 이점이 있습니까?
프로세스 범위 변수에 대해 .data 및 .bss의 두 섹션을 갖는 이점은 무엇입니까? 왜 그냥 가지고 있지 않아? 나는 각 섹션이 사용되는 것을 안다. 나는 gcc를 사용하고있다..bss 섹션을 사용하면 어떤 이점이 있습니까?
.bss는 "메모리"를 사용하지만 실행 파일 내의 공간은 사용하지 않습니다. 그 유일한 목적은 제로 - 초기화 된 데이터를 보유하는 것입니다 (아시다시피).
. 데이터 (및 rodata와 같은 관련 섹션)는 실제로 실행 파일 내의 공간을 소비하며 대개 문자열, 정수 및 전체 개체까지 포함합니다.
일반 프로그램에는 초기화되지 않은 데이터가 많이 있으므로 출력 파일에서 추가 공간을 차지하지 않도록하는 것이 중요한 보너스입니다.
다중. * 데이터 섹션의 경우 ... .rodata/.data는 메모리 보호를위한 힌트로 사용할 수 있습니다 (.rodata를 덮어 쓰지 못하게하고 .data에 대한 읽기/쓰기 허용).
몇 가지 예를 들려 줄 수 있습니까? 메모리보기, asm 지시 등. – Bruce
@ Bruce : 런타임에는 기본적으로 .data와 .bss간에 차이가 없습니다. 차이점은 링커 출력 (한 섹션은 디스크에 있고 다른 섹션은 디스크에 존재하지 않음)과 실행 가능 로더가 섹션을로드하는 방법입니다. .data는 복사입니다. 로더가 memcpy를 사용할 수 있습니다 ... .bss가 0입니다. 로더가 memset을 사용할 수 있습니다. –