Выравнивание и STL в VS 2012 / VC11

У меня есть расплывчатая память о том, что STL имеет проблемы с выровненными структурами (например, векторы SIMD, помещенные в std :: vector), если вы не укажете пользовательский распределитель.

В соответствии с этот документ VS 2012 / VC11 частично поддерживает выравнивание с ++. Означает ли это, что реализация VS STL теперь может обрабатывать выровненные структуры без предоставления специального распределителя?

2

Решение

Нет. Это означает, что компилятор VC ++ поддерживает метод для указания требуемого выравнивания для типа ( __declspec(align(N)) синтаксис). VC ++ всегда это поддерживал, и он в основном указан как «частичный», потому что «у нас есть некоторые функции, связанные с выравниванием, и это выглядит лучше, чем сказать« не поддерживается ».

Кроме того, я не знаю ничего в спецификации выравнивания C ++ 11, которая указывает, что векторы SIMD в стандартном контейнере библиотеки гарантированно будут работать. Выравнивание в C ++ 11 — это просто формализация того, что компиляторы уже сделали в этом отношении (насколько я знаю. Мне бы очень хотелось, если бы вы могли доказать, что я не прав).

SIMD-векторы — это то, что стандарт называет «типами с выравниванием» (см. Часть о «расширенном выравнивании»). По сути это означает, что «мы ничего не гарантируем, и компилятор сам решает, как / если они обрабатывают такие типы.

Другими словами, реализация этой части C ++ 11 не обязательно изменит способ обработки SIMD-объектов.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector