Я студент колледжа, делаю поиск советов, которые повышают производительность 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», которую я не измерял, но с тем же флагом отладки. Заранее спасибо…
Чтобы удалить все лишние разделы в файле, вам нужно удалить его. Просто делать strip main.exe
чтобы сделать это.
Кроме того, вы можете связать свой код с -s
флаг, который выполняет то же самое. Если вы компилируете из .cpp
-> .exe
непосредственно (например, с помощью вашей командной строки), а затем поместите его в эту командную строку, чтобы выполнить это.