我想修改一个数组的分配:
float * a = new float[n] ;
使用对齐分配器。我本来想尝试使用放置 new 和 posix_memalign(或新的 c++11 等效物),但看到 数组放置 new 存在问题,因为 编译器可能需要额外的存储空间来存储计数或其他元数据。
我尝试了:
int main()
{
float * a = new alignas(16) float[3] ;
a[2] = 0.0 ;
return a[2] ;
}
但编译器似乎表明alignas被忽略了:
$ g++ -std=c++11 t.cc -Werror
t.cc: In function ‘int main()’:
t.cc:4:39: error: attribute ignored [-Werror=attributes]
float * a = new alignas(16) float[3] ;
^
t.cc:4:39: note: an attribute that appertains to a type-specifier is ignored
看起来使用 alignas 的正确方法是在 结构声明中声明一个带有 alignas 的结构,但这只适用于固定大小。
还有一个 aligned_storage 模板,但我认为这也只适用于固定大小。
是否有任何标准方法可以进行对齐数组分配并调用所有元素的构造函数?