2009-07-13 2 views
0

나는 컴파일러가 작동하는 방법에 대한 자세한 내용을 배우려고하고 nm을 사용할 때 기호 B가 무엇을 의미하는지 궁금해하고있었습니다. 내가하면 libstdC++에 표준 : : cout을을 따르려고했는데, 그것은nm의 초기화되지 않은 데이터 섹션

nm -DC /usr/lib/libstdc++.so.6 | grep cout 
000e8da0 B std::cout 
000e9020 B std::wcout 
실제 함수에 대한 링크입니다

와 B가 무슨 뜻로 끝?

답변

3

즉 기호가 전역이고 초기화되지 않은 데이터 섹션 (역사적으로 BSS이므로 'B')에 있음을 의미합니다. 여기에 더 많은 nm의 정보 : 또한

http://linux.die.net/man/1/nm

당신이 "사람이 1 나노 미터"를 입력하면 가능성이 가능합니다.

그리고 기능은 어떻습니까? "cout"은 함수가 아닌 객체 인스턴스입니다. 이 클래스는 함수를 가지며, 대부분이 경우에는 연산자 오버로드가 발생합니다. 내지 설명서 페이지에서

+0

cout << "뭐든간에"std :: cout 개체로 인스턴스화 한 다음 std :: operator <<를 호출하여 인쇄합니까? – victor

+0

std :: cout은 아마도 전역 객체이므로 global (bss) 섹션에 배치됩니다. 어딘가에 'main'이라는 프로그램이 호출되기 전에 플랫폼은 consttructor를 실행하고 std :: cout (및 기타 전역)을 초기화합니다. – nos

1

:

B  The symbol is in the uninitialized data section (known as BSS). 
1

"초기화되지 않은"데이터는 BSS 부는 실제로 모두 제로로 OS 로더에 의해 초기화된다. 내용이 모두 0으로 알려져 있기 때문에 디스크의 이미지에서 공간을 차지하지 않습니다. 크기 만 이미지에 저장됩니다.

일반적으로 전역 변수는 BSS 섹션에 할당됩니다. 이것은 또한 전역 변수가 일반적으로 0으로 초기화되는 이유이기도합니다.

관련 문제