【发布时间】:2014-08-30 12:05:28
【问题描述】:
我有这个代码:
#include <iostream>
int main()
{
std::cout << sizeof(std::cout) << std::endl;
return 0;
}
用 g++ -g main.cpp 编译它(它在我的操作系统上打印 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 只是basic_ostream<char, std::char_traits<char>> 的typedef
Die 不包含大小属性(DW_AT_byte_size),我不明白为什么。可执行文件中没有其他用于 ostream 类的 die-s,但编译器应该知道该类的大小(它使用sizeof 打印大小)。所以我的问题是:我怎样才能从带有objdump 的矮人信息中获得ostream 类的正确大小。
【问题讨论】:
-
C++ find size of ofstream 的可能重复项
-
@SirDigbyChickenCaesar 我的问题与那个问题无关