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