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

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

И я проверял мой исполняемый файл «release» (оптимизированный для компилятора) с помощью инструментов 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», которую я не измерял, но с тем же флагом отладки. Заранее спасибо…

0

Решение

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

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

0

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


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