Я обнаружил, что многопоточная программа, созданная с помощью Boost, намного быстрее, когда я активирую флаг -O3. Тем не менее, это вызывает некоторые дополнительные предупреждения компилятора, все из которых говорят следующее:Должен ли я беспокоиться о предупреждениях компилятора в Boost с помощью -O3?
warning: dereferencing type-punned pointer will break strict-aliasing rules
Эти предупреждения все генерируется в файле Boost, shared_mutex.hpp
. Чтобы быть конкретным, следующая функция вызывает эти предупреждения:
template<typename T>
T interlocked_compare_exchange(T* target,T new_value,T comparand)
{
BOOST_STATIC_ASSERT(sizeof(T)==sizeof(long));
long const res=BOOST_INTERLOCKED_COMPARE_EXCHANGE(reinterpret_cast<long*>(target),
*reinterpret_cast<long*>(&new_value),
*reinterpret_cast<long*>(&comparand));
return *reinterpret_cast<T const*>(&res);
}
Глядя на this question, похоже, эти предупреждения означает, что код может привести к сбою, но кажется, что вряд ли идет из файла Boost. Теперь моя программа стала довольно сложной, и я видел ее (на редких и, казалось бы, случайных случаях) сбой при работе в течение длительных периодов времени. Возможно ли, что библиотека Boost вызывает это? Если это имеет значение, я использую mingw.
Все, что возможно, но я бы проверил ваш код перед повышением, код boost проверен множеством людей, которые его используют, ваш код проверяется только вами, что, скорее всего, будет правильным? – aaronman
@aaronman: все же, если этот код находится в 'shared_mutex.hpp' в дистрибутиве boost, тогда предупреждение не находится в * его * коде ... и предупреждение действительно выглядит законным. –