Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Ну все, спасайте меня :-) MS VC++ 7.0 05.02.02 09:58 Число просмотров: 757
Автор: leo <Леонид Юрьев> Статус: Elderman
|
Есть такой зверь MS Visual Studio .NET beta2, а в нем VC++ 7.0...
Компилятор там точно нормальный, потому что немного старше своего "брата" из WinXP DDK.
Суть борьбы вот в чем:
Нужно заставить компилятор не "свертывать" чтение по указателю, результат которого не используется. Например имеем код:
void MyFunc(volatile unsigned *MyPtr)
{
unsigned dummy;
dummy = *MyPtr;
dummy = *MyPtr;
} ---
При полной оптимизации (/Oxa) компилятор убивает обращения к *MyPtr, а их нужно оставить. Потому что MyPtr указывает на Memory Mapped I/O Space и чтение *MyPtr аналогично __asm in al, dx
До включения полной потимизации было достаточно volatile-спецификатора, что сейчас делать не знаю. Конечно можно тупо написать функцию чтения, но в данном случае нужно максимально быстро, и затраты на вызов функции существенны.
Было-бы интересно узнать, как указать компилятору что функция (или выражение) имеет некий side-effect и не допускает удаления, как например _inp(). Например GCC имеет для этого все средства...
|
- [C++] Ну все, спасайте меня :-) MS VC++ 7.0 - leo 05.02.02 09:58 [757]
|
|
|