Как создать в режиме выпуска с оптимизацией в GCC?

Доступ к полю является просто ссылкой памяти, тогда как использование свойства на самом деле вызывает метод и включает вызов функции наверху. Причина использовать свойства, а не поля состоит в том, чтобы изолировать Ваш код от изменений и обеспечить лучшую гранулярность по доступу. Не представляя Ваше поле непосредственно Вы имеете больший контроль над тем, как доступ сделан. Используя автоматические поля позволяет Вам добираться обычно поведение метода get/метода set, но сборки в способности изменить это без последующей потребности в изменениях для распространения к другим частям кода.

, Например, скажите, что Вы хотите изменить свой код так, чтобы доступом к полю управляла роль текущего пользователя. Если бы Вы представили поле публично, необходимо было бы коснуться каждой части кода, который получил доступ к нему. Представление его через свойство позволяет Вам изменять код свойства для добавления нового требования , но не приводит к ненужным изменениям ни в каком коде, который получает доступ к нему .

15
задан Greg Hewgill 8 October 2009 в 00:14
поделиться

4 ответа

http://gcc.gnu.org/on Lineocs/gcc/Optimize-Options.html

Не существует универсального решения для всех - вам нужно понимать свое приложение, свое требования и флаги оптимизации для определения правильного подмножества для вашего двоичного файла.

Или ответ, который вы хотите: -O3

19
ответ дан 1 December 2019 в 00:16
поделиться

Вот часть Makefile, которую я регулярно использую (в этом примере он пытается создать программу с именем foo ).

Если запустить как $ make BUILD = debug или $ make debug тогда будет использоваться Debug CFLAGS. Они отключают оптимизацию ( -O0 ) и включают символы отладки ( -g ).

Если вы опустите эти флаги (запустив $ make без каких-либо дополнительные параметры), вы создадите версию Release CFLAGS, в которой включена оптимизация ( -O2 ), символы отладки удалены ( -s ) и утверждения отключены. ( -DNDEBUG ).

Как предлагали другие, вы можете поэкспериментировать с различными настройками -O * в зависимости от ваших конкретных потребностей.

ifeq ($(BUILD),debug)   
# "Debug" build - no optimization, and debugging symbols
CFLAGS += -O0 -g
else
# "Release" build - optimization, and no debug symbols
CFLAGS += -O2 -s -DNDEBUG
endif

all: foo

debug:
    make "BUILD=debug"

foo: foo.o
    # The rest of the makefile comes here...
20
ответ дан 1 December 2019 в 00:16
поделиться

Обратите внимание, что в gcc нет «режима выпуска» и «режима отладки», как в MSVC. Весь код - это просто код. Наличие различных параметров оптимизации (-O2 и -Os - единственные, о которых вам обычно нужно заботиться, если только вы не выполняете очень точную настройку) изменяет сгенерированный код, но не таким образом, чтобы предотвратить взаимодействие с другими ABI-совместимыми код. Обычно вам нужна оптимизация того, что вы хотите выпустить.

Наличие "-g" опция приведет к размещению расширенной информации о символах и исходном коде в сгенерированных файлах, что полезно для отладки, но увеличивает размер файла (и показывает ваш исходный код), чего вы часто не хотите в "выпущенном" двоичные файлы.

Но они не исключительные. У вас может быть двоичный файл, скомпилированный с информацией об оптимизации и отладке, или один без них.

9
ответ дан 1 December 2019 в 00:16
поделиться

-O2 включит все оптимизации, которые не требуют компромисса между пространством и скоростью и как правило, используется чаще всего. -O3 делает некоторое пространство для компромиссов скорости (например, встроенная функция). -Os делает O2 плюс делает другие вещи для уменьшения размера кода. Это может сделать работу быстрее, чем O3, за счет улучшения использования кеша. (проверьте, работает ли это для вас.) Обратите внимание, что существует большое количество параметров, которых не касается ни один из переключателей O. Причина, по которой они не учитываются, заключается в том, что это часто зависит от того, какой код вы пишете, или сильно зависит от архитектуры.

Он требует компромисса между пространством и скоростью и, как правило, используется чаще всего. -O3 делает некоторое пространство для компромиссов скорости (например, встроенная функция). -Os делает O2 плюс делает другие вещи для уменьшения размера кода. Это может сделать работу быстрее, чем O3, за счет улучшения использования кеша. (проверьте, работает ли это для вас.) Обратите внимание, что существует большое количество параметров, которых не касается ни один из переключателей O. Причина, по которой они не учитываются, заключается в том, что это часто зависит от того, какой код вы пишете, или сильно зависит от архитектуры.

Он требует компромисса между пространством и скоростью и, как правило, используется чаще всего. -O3 делает некоторое пространство для компромиссов скорости (например, встроенная функция). -Os делает O2 плюс делает другие вещи для уменьшения размера кода. Это может сделать работу быстрее, чем O3, за счет улучшения использования кеша. (проверьте, работает ли это для вас.) Обратите внимание, что существует большое количество параметров, которых не касается ни один из переключателей O. Причина, по которой они не учитываются, заключается в том, что это часто зависит от того, какой код вы пишете, или сильно зависит от архитектуры.

Обратите внимание, что существует большое количество опций, которых не касается ни один из переключателей O. Причина, по которой они не учитываются, заключается в том, что это часто зависит от того, какой код вы пишете, или сильно зависит от архитектуры.

Обратите внимание, что существует большое количество опций, которых не касается ни один из переключателей O. Причина, по которой они не учитываются, заключается в том, что это часто зависит от того, какой код вы пишете, или сильно зависит от архитектуры.

4
ответ дан 1 December 2019 в 00:16
поделиться