«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Могут ли компиляторы оптимизировать новые вызовы в C ++?

Могут ли компиляторы оптимизировать новые вызовы в C ++?

Опубликовано в 2025-03-25
Просматривать:676

Can Compilers Optimize Away `new` Calls in C  ?

может ли компилятор устранить распределения памяти кучи?

в C, новый оператор используется для распределения памяти на куче. Компиляторы могут оптимизировать код, включая удаление ненужных заявлений. Могут ли компиляторы устранить распределения памяти кучи, сделанные с использованием нового?

поведение компилятора

исследования указывают на то, что разные компиляторы обрабатывают распределения кучи по -разному:

  • g (5.2.0) и Visual Studio 2015 не оптимизируют. ) оптимизирует новый вызов, даже с полными флагами оптимизации.
достоверность оптимизации

достоверность оптимизации компилятора является предметом дебатов. Некоторые утверждают, что компилятору не разрешается оптимизировать новые вызовы, поскольку они могут иметь наблюдаемое поведение (например, бросая исключение). Другие утверждают, что оптимизация новых вызовов разрешена, если компилятор может гарантировать, что никакое наблюдаемое поведение не будет затронуто.

C 14 Standard

n3664: уточнение распределения памяти уточняло правила, касающиеся оптимизации компилятора и распределения памяти. Это позволяет компиляторам оптимизировать распределения памяти в определенных сценариях. Однако, это положение подвергалось критике, поскольку оно потенциально нарушает причинность.

дополнительные соображения

    не проводящий новый
  • : clang также оптимизируют вызовы, не выходящие на новую оператор. Оператор Новые реализации в различных единицах перевода могут повлиять на обоснованность оптимизации компилятора, связанных с распределением кучи.
  • Заключение
  • ]

Заключение

]

вывод

Can Compilers Optimize Away `new` Calls in C  ?
. В то время как некоторые компиляторы реализуют эту оптимизацию на основе N3664, его достоверность остается предметом обсуждения и зависит от конкретных обстоятельств, включая стандарт C и наличие пользовательских распределителей памяти.

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3