2018-03-01【GCC平台C++17 新特性aligned_new 的使用】

为什么有这个特性

C++的范式是使用newdelete来分配与释放内存。这与C中的mallocfree对应。

在使用SIMD指令时,要求数据源存储在满足特定对齐条件的内存段中。这在C中是通过aligned_alloc实现的。然而,C++的范式中没有与aligned_alloc对应的东西。

因此,aligned_new就呼之欲出了。

使用

根据 C++ Standards Support in GCC,特性Dynamic memory allocation for over-aligned data 在GCC7中支持,因此首先要做的是安装g++-7

此外,在编译选项中,需要加入-std=c++17

最后,新特性的使用比较奇妙。在 cppreference 中,新特性对应的接口是:void* operator new[](std::size_t count, std::align_val_t al),因此使用的方式为:

// Filename: main.cpp
#include 

int main () {
  int* p = new((std::align_val_t) 64) int[100];
  delete[] p;
}

编译命令为:$ g++-7 -std=c++17 main.cpp

为什么说它比较奇妙呢?符合直觉的用法当然是int* p = new(64) int[100];。这让我找各种原因找了一下午,发现最后是一个类型问题。

你可能感兴趣的:(2018-03-01【GCC平台C++17 新特性aligned_new 的使用】)