В спецификации не указано, что tr1::array
выровнено по 16 байтов.Единственная гарантия состоит в том, что массив будет правильно выровнен в соответствии с размером value_type
.Если размеры объектов, которые вы храните в массивах, не будут такими, что выравнивание value_type
кратно 16 байтам, вы не получите 128-разрядное выравнивание, которое вы хотите использовать в инструкциях SSE.Если у вас есть существующий код, основанный на том факте, что один компилятор использовал 16-байтовое выравнивание для всех array
экземпляров, вам следует исправить это.Вы пользуетесь поведением, которое превышает то, что определяет стандарт, и оно очень хрупкое.
Если у вас есть код, основанный на определенном количестве выравнивания в используемой памяти, то вам следуетявное применение этого выравнивания при выделении памяти;все, что меньше, подвержено ошибкам, если вы меняете компиляторы или платформы. Предыдущий вопрос посвящен тому, как заставить tr1::array
объекты использовать выровненную память.