У меня есть расплывчатая память о том, что STL имеет проблемы с выровненными структурами (например, векторы SIMD, помещенные в std :: vector), если вы не укажете пользовательский распределитель.
В соответствии с этот документ VS 2012 / VC11 частично поддерживает выравнивание с ++. Означает ли это, что реализация VS STL теперь может обрабатывать выровненные структуры без предоставления специального распределителя?
Нет. Это означает, что компилятор VC ++ поддерживает метод для указания требуемого выравнивания для типа ( __declspec(align(N))
синтаксис). VC ++ всегда это поддерживал, и он в основном указан как «частичный», потому что «у нас есть некоторые функции, связанные с выравниванием, и это выглядит лучше, чем сказать« не поддерживается ».
Кроме того, я не знаю ничего в спецификации выравнивания C ++ 11, которая указывает, что векторы SIMD в стандартном контейнере библиотеки гарантированно будут работать. Выравнивание в C ++ 11 — это просто формализация того, что компиляторы уже сделали в этом отношении (насколько я знаю. Мне бы очень хотелось, если бы вы могли доказать, что я не прав).
SIMD-векторы — это то, что стандарт называет «типами с выравниванием» (см. Часть о «расширенном выравнивании»). По сути это означает, что «мы ничего не гарантируем, и компилятор сам решает, как / если они обрабатывают такие типы.
Другими словами, реализация этой части C ++ 11 не обязательно изменит способ обработки SIMD-объектов.
Других решений пока нет …