О семантике C++ (продолжение)
lexa - 07/Окт/2011 19:10
Наши читатели подсказывают нам, что в рассмотренном ранее примере может быть алиасинг.
Действительно, если у нас такое вот:
class someShit{
char *m_sBuffer;
size_t m_iLimit;
size_t m_iCounter;
};
char *m_sBuffer;
size_t m_iLimit;
size_t m_iCounter;
};
m_sBuffer = (char*)&m_iCounter;
Меняю объявление на такое:
class someShit{
char m_sBuffer[10240];
size_t m_iLimit;
size_t m_iCounter;
};
char m_sBuffer[10240];
size_t m_iLimit;
size_t m_iCounter;
};
void someShit::try1()
{
m_iCounter = 0;
while (m_iCounter< m_iLimit && m_sBuffer[m_iCounter])
m_iCounter++;
}
{
m_iCounter = 0;
while (m_iCounter< m_iLimit && m_sBuffer[m_iCounter])
m_iCounter++;
}
Исходный вопрос (как отключить) снимается, restrict/__restrict в помощь, ключи компиляции опять-же есть.