Я ищу примеры кода, который вызывает недетерминизм в процессе компиляции GCC или Clang.
Одним из ярких примеров является использование макроса __DATE__
.
GCC и Clang имеют множество флагов компилятора для управления результатом недетерминированные действия в компиляторе, например. -frandom-seed
и -fno-guess-branch-probability
Есть ли какие-нибудь небольшие примеры, на которые влияют эти флаги?
Если быть более точным:
$ c++ main.cpp -o main && shasum main
aabbccddee
$ c++ main.cpp -o main && shasum main
eeddccbbaa
Я ищу примеры кода без макросов, где несколько запусков компилятор приводят к разным выходам, но могут быть исправлены, например, -frandom-seed
Обновлено:
связанные: из документов gcc:
-fno-guess-branch-probability:
Sometimes gcc will opt to use a randomized model to guess branch probabilities,
when none are available from either profiling feedback (-fprofile-arcs)
or __builtin_expect.
This means that different runs of the compiler on the same program
may produce different object code.
The default is -fguess-branch-probability at levels -O, -O2, -O3, -Os.
@tadman StackOverflow также относится к инструментам, используемым разработчиками, так что это действительно имеет значение. Пожалуйста, перечитайте stackoverflow.com/help/on-topic.
@rubenvb Это не то, на что вы можете кратко ответить. Это не по теме и уже набрало три голоса. Я здесь не один. Я не говорю, что это плохой вопрос, просто он не в том месте.
@tadman Мне, честно говоря, наплевать, сколько у него близких голосов. Это очень ответственный вопрос (какой код / параметры запускают такое поведение) об инструментах, обычно используемых разработчиками (компиляторами). Я не могу на это ответить. Кажется, вы не можете, но это не делает этот вопрос не по теме.
@tadman Вопрос требует некоторых небольших примеров кода. На мой взгляд, это был бы емкий ответ.
@sdgfsdh Это только верхушка. Чтобы правильно ответить на этот вопрос, потребуются значительные усилия и диалог. Это хороший вопрос, но он слишком широк, чтобы здесь отвечать. Форумы позволяют гораздо больше обсуждать и уточнять. Stack Overflow не должен работать таким образом.
AFAICT этот вопрос по теме в соответствии с правилами, описанными по ссылке @ rubenvb выше. В частности, он «о программном инструменте, обычно используемом программистами», и является «практической, решаемой проблемой, уникальной для разработки программного обеспечения».
Я считаю, что ваш вопрос чудовищно широк. Я рекомендую вам посмотреть здесь: gcc.gnu.org/onlinedocs/gcc/… там есть несколько примеров кода. Может быть, после того, как вы посмотрите там и на связанные ссылки оттуда, вы сможете вернуться и задать гораздо более ограниченный вопрос.
@Drt Ни один из абзацев в вашей ссылке не имеет никакого отношения к моему вопросу. Не могли бы вы пояснить, почему вы считаете мой вопрос широким? - возможно я смогу уточнить свой вопрос
Вопросник @Drt просит «несколько примеров», а не «все возможные случаи». Неужели не без причины попросить несколько примеров феномена?
@MarcGlisse добавил фрагмент из документации gcc
@ Гаэтано а, хорошо, спасибо.
Поскольку это не относится к неработающему коду, который необходимо исправить, здесь, в Stack Overflow, это не по теме. Возможно, вы захотите обратиться к форуму о компиляторах (например, clang или GCC), чтобы получить информацию от людей, которые действительно создают и поддерживают компиляторы, и где вы можете развернуть обсуждение по этому вопросу.