私はこのコードを持っています:
#include <iostream>
int main()
{
std::cout << sizeof(std::cout) << std::endl;
return 0;
}
コンパイルしますg++ -g main.cpp
(私のOSでは272が出力されます)
その後、objdump --dwarf=info a.out
次のデバッグ情報エントリ (ダイ) を実行して確認しますostream
。
<2><c5a>: Abbrev Number: 41 (DW_TAG_class_type)
<c5b> DW_AT_name : (indirect string, offset: 0x5fa): basic_ostream<char, std::char_traits<char> >
<c5f> DW_AT_declaration : 1
<c60> DW_AT_sibling : <0xc77>
実際ostream
には、 Die の typedef にbasic_ostream<char, std::char_traits<char>>
サイズ ( ) の属性が含まれていないだけで、そのDW_AT_byte_size
理由がわかりません。実行可能ファイルには ostream クラスの他のダイはありませんが、コンパイラはそのクラスのサイズを知っている必要があります (サイズは で出力されますsizeof
)。だから私の質問はostream
、ドワーフ情報からクラスの適切なサイズを取得するにはどうすればよいですかobjdump
?