__declspec(align(#))在堆上

时间:2018-12-03 07:46:59

标签: c++ alignment memory-alignment

如何对齐类似于__declspec(align(#))的堆上分配的对象?这包括数组,因此不能仅将对齐方式添加到类中

class SomeClass
{
    //Something
}

//Somewhere
a = new SomeClass[20] //aligned to 64 bytes

1 个答案:

答案 0 :(得分:0)

__ declspec(align())仅适用于具有静态生存期的对象,如果您需要的对齐方式大于new所提供的对齐方式,则必须使用可以处理此问题的专用分配器(例如,使用_aligned_malloc或VirtualAlloc)。

_aligned_malloc允许您指定所需的对齐方式,而VirtualAlloc使用系统分配粒度(在我所知道的所有版本的Windows上都是64k,与大多数分配相比,它肯定是一个很大的值)。