Здравствуйте, MaximE, Вы писали:
ME>Здравствуйте, Seriously Serious, Вы писали:
SS>>От этого всего у меня вопросы:
SS>>1) Гарантируется ли что-нибудь относительно порядка вызова функций синхронизации? или компилятор тут тоже может оптимизировать как захочет?
ME>Гарантируется. После вызова "непрозрачной" ф-ции компилятор будет перечитывать значения всех переменных из памяти. В противном случае даже single threaded код работать не будет.
ME>У компилятора просто нет никакой возможности установить, что изменяет "непрозрачная" ф-ция. К примеру, C++ runtime может сохранить адреса всех глобальных переменных и любая "непрозрачная" ф-ция может изменить значение какой либо глобальной переменной не принимая ее адреса явно в качестве параметра вызова. Компилятору знание об эффектах "непрозрачных функций" недоступно, поэтому ему придется перечитывать все переменные из памяти.
ME>Ok, компилятору, обычно, известны эффекты всех ф-ций, которые выполняет его же C++ runtime, но это был лишь пример, и вместо C++ runtime может выступать любой C/C++ API, к исходникам которого у компилятора нет доступа.
Ты забываешь про глобальную оптимизацию. В общем случае, гадать, что компилятор может соптимизировать, а что нет -- бесполезное занятие. Все такие догадки релевантны только применительно к конкретной платформе.
SS>>2) Имеет ли право компилятор все переменные держать в регистрах? (где об этом в стандарте сказано?)
ME>Имеет, но см. п.1.... << RSDN@Home 1.1.0 stable >>