Могут ли разные уровни оптимизации привести к функционально разному коду?

Мне любопытно, какие свободы есть у компилятора при оптимизации. Давайте ограничим этот вопрос GCC и C / C ++ (любая версия, любой вариант стандарта):

Можно ли написать код, который ведет себя по-разному в зависимости от того, с каким уровнем оптимизации он был скомпилирован?

] Я имею в виду пример печати разных фрагментов текста в различных конструкторах на C ++ и получение разницы в зависимости от того, опущены ли копии (хотя мне не удалось заставить это работать).

Подсчет тактов не разрешено. Если у вас есть пример для компилятора, отличного от GCC, мне тоже было бы любопытно, но я не могу его проверить. Бонусные баллы за пример на C.: -)

Редактировать: Код примера должен быть стандартным и не содержать неопределенного поведения с самого начала.

Редактировать 2: Уже есть отличные ответы! Позвольте мне немного поднять ставки: код должен представлять собой хорошо сформированную программу и соответствовать стандартам, и он должен компилироваться для исправления детерминированных программ на каждом уровне оптимизации. (Это исключает такие вещи, как условия гонки в плохо сформированном многопоточном коде.) Также я понимаю, что это может повлиять на округление с плавающей запятой, но давайте не будем учитывать это.

Я только что набрал 800 репутации, поэтому я думаю, что потеряю 50 репутации как награда за первый полный пример, чтобы соответствовать (духу) этих условий; 25, если это связано со злоупотреблением строгим псевдонимом. (При условии, что кто-то покажет мне, как отправить вознаграждение кому-то другому.)

44
задан ks1322 24 June 2013 в 19:43
поделиться