Должен ли флаг HAS_DEBUG появляться в исполняемом файле выпуска g ++?

0

Я - студент колледжа, делаю поиск в советах, которые повышают производительность C++.

И я проверял свой "выпуск" (оптимизированный компилятор) исполняемый файл с помощью инструментов GCC. Когда я использую objdump, он отображает заголовки файлов:

C:\Users\Nicobook\Uni\TCC\TCCII\Fontes\Códigos\teste>c:\MinGW32\bin\objdump.exe -f main.exe    
main.exe:     file format pei-i386
architecture: i386, flags 0x0000013a:
EXEC_P, HAS_DEBUG, HAS_SYMS, HAS_LOCALS, D_PAGED
start address 0x004014f0

Там флаг HAS_DEBUG, должен ли он иметь? Я измеряю время выполнения с включенными оптимизациями (надеюсь, см. Ниже в флагах G++), поэтому мне нужен самый оптимизированный двоичный файл, но я думаю, что там отлаживается информация об этом. Есть способ удалить отладочную информацию?

Я использую MinGW32, G++ 4.8.1 и OBJDUMP 2.23.52. Я использую следующие флаги на G++:

C:\Users\Nicobook\Uni\TCC\TCCII\Fontes\Códigos\teste>c:\MinGW32\bin\g++.exe -O3 -Wall -Wextra -pedantic-errors -ansi --std=c++11 -o main.exe main.cpp

Main.cpp - это тестовая программа "hello world", которую я не измерял, но с тем же флагом отладки. Заранее спасибо...

Теги:
compiler-optimization
mingw
objdump

1 ответ

0
Лучший ответ

Чтобы удалить все посторонние разделы в файле, вам необходимо снять его. Просто выполните strip main.exe чтобы выполнить это.

В качестве альтернативы вы можете связать свой код с флагом -s, который выполняет одно и то же. Если вы компилируете из .cpp.exe напрямую (например, с помощью командной строки), то его выполнение в эту командную строку выполнит.

  • 0
    спасибо, что я не знал о разделах, размер исполняемого файла уменьшился с 1,8M до 576K: O, очевидно, это не влияет на производительность, поэтому я думаю, что мои прогоны остаются действительными :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню