Насколько я знаю, нет препроцессорных директив для обнаружения строгих псевдонимов.
Если вы используете «-Wall» gcc, тогда компилятор предупредит вас о коде, который может нарушить правило строгого сглаживания.
-Wstrict-aliasing
--- Эта опция активна только когда «-fstrict ступенчатость» является активными. Он предупреждает о коде, который может нарушить строгие правила псевдонимов , которые компилятор использует для оптимизации . Предупреждение не уловить все случаи, но делает попытку поймать более распространенные ловушки. Это включено в '-Wall'. Это эквивалентно к «-Wstrict сглаживанием = 3»
Если код вы работаете на очень важно, то вы можете отключить -fstring-aliasing
в НКУ. Или, если вы не хотите отключать строгий псевдоним, я предлагаю посмотреть выход asm, чтобы убедиться, что компилятор не делает опасных оптимизаций, которые вам не нужны.
Как и в стороне, akauppi сказал в комментариях:
'ограничение' включает строгий Aliasing оптимизированные для конкретных указателей.
Ключевое слово ограничения не включает ...Оптимизации»напрямую, а это дает компилятору больше информации и что дополнительная информация косвенно помогает компилятору определить, если он может применить определенные методы оптимизации
хорошее объяснение Ограничить ключевое слово из TI's DSP compiler documentation:.
Чтобы помочь компилятору определить зависимости от памяти, вы можете квалифицировать указатель, ссылку или массив с ключевым словом ограничения. Ключевое слово ограничения - это тип классификатора, который может применяться к указателям, ссылкам и массивам. Его использование представляет собой гарантию программиста, которая в рамках указателя декларация, на которую указывает объект, может быть это только указатель. Любое Нарушение этой гарантии делает программу неопределенной. Эта практика помогает компилятор оптимизирует определенные разделы кода, потому что информация о сглаживании может быть более легко определена.
Это неправильно. Оба C и C++ допускают сглаживание между переменными того же типа, но ни C, ни C++ не разрешают сглаживание разных типов (т. Е. Оптимизация строгих псевдонимов в GCC). – janneb
.. за исключением char, конечно – janneb