Re[2]: ужас
От: MaximE Великобритания  
Дата: 19.01.05 22:55
Оценка:
Здравствуйте, Seriously Serious, Вы писали:

SS>От этого всего у меня вопросы:

SS>1) Гарантируется ли что-нибудь относительно порядка вызова функций синхронизации? или компилятор тут тоже может оптимизировать как захочет?

Гарантируется. После вызова "непрозрачной" ф-ции компилятор будет перечитывать значения всех переменных из памяти. В противном случае даже single threaded код работать не будет.

У компилятора просто нет никакой возможности установить, что изменяет "непрозрачная" ф-ция. К примеру, C++ runtime может сохранить адреса всех глобальных переменных и любая "непрозрачная" ф-ция может изменить значение какой либо глобальной переменной не принимая ее адреса явно в качестве параметра вызова. Компилятору знание об эффектах "непрозрачных функций" недоступно, поэтому ему придется перечитывать все переменные из памяти.

Ok, компилятору, обычно, известны эффекты всех ф-ций, которые выполняет его же C++ runtime, но это был лишь пример, и вместо C++ runtime может выступать любой C/C++ API, к исходникам которого у компилятора нет доступа.

SS>2) Имеет ли право компилятор все переменные держать в регистрах? (где об этом в стандарте сказано?)


Имеет, но см. п.1.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.