objdump не показывает размер для класса ostream

У меня есть этот код:

#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 это просто typedef для basic_ostream<char, std::char_traits<char>>
Die не содержит атрибут с размером (DW_AT_byte_size) и я не могу понять почему. В исполняемом файле нет других штампов для класса ostream, но компилятор должен знать размер этого класса (он печатает размер с sizeof). Итак, мой вопрос: как я могу получить правильный размер для ostream класс из карликовой информации с objdump,

1

Решение

Согласно спекуляция DW_AT_Declaration указывает, что DIE описывает описание, а не определение; вам нужно посмотреть в объектном файле, который содержит определение.

1

Другие решения

Независимая от языка утилита objdump сбрасывает символы в объектный файл. std :: ostream — это класс, а не объект.

Объект std :: cout происходит из библиотеки C ++. Используйте obdjump в libstdc ++., Чтобы найти std :: cout.

1

По вопросам рекламы [email protected]