Ошибка оптимизации по размеру?
От: hooky-mars  
Дата: 24.03.10 07:46
Оценка:
Saluer!

У меня смешанная сборка по x64. Сталкнулся с такой проблемой. При вызове определенной функции, в определенном месте, вываливается ошибка 0xC0000005 (ошибка именно при обращении к инструкции call).
Данная проблема не проявлялась не в x86, не в дебажной версии. В релизе x64 ошибка исчезла после того, как я поменял оптимизацию по размеру на оптимизацию по скорости. Это глюк оптимизации или просто проявление ошибки стало другим (вывалится в другом месте) из за изменения машинного кода?
Re: Ошибка оптимизации по размеру?
От: Warturtle  
Дата: 24.03.10 08:45
Оценка:
Здравствуйте, hooky-mars, Вы писали:

HM>Saluer!


HM>У меня смешанная сборка по x64. Сталкнулся с такой проблемой. При вызове определенной функции, в определенном месте, вываливается ошибка 0xC0000005 (ошибка именно при обращении к инструкции call).

HM>Данная проблема не проявлялась не в x86, не в дебажной версии. В релизе x64 ошибка исчезла после того, как я поменял оптимизацию по размеру на оптимизацию по скорости. Это глюк оптимизации или просто проявление ошибки стало другим (вывалится в другом месте) из за изменения машинного кода?

У меня было что-то похожее — в 64-битном варианте вылезала такая же ошибка. В отладчике это выглядело странно: на вход в функцию передавался хороший годный указатель на буфер с текстом, а внутри нее он уже был другим (негодным). Кроме того в какой-то из них дебагер ходил по инструкциям не в том порядке, как они идут по тексту программы (видимо, оптимизатор как-то ловко их переупорядочил). В конце концов, поставил вокруг нескольких этих функций #pragma optimize("", off)/("", on) и все заработало.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.