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 <new>

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];。这让我找各种原因找了一下午,发现最后是一个类型问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 接着上节 condition_varible ,本节主要介绍future的内容,练习代码地址。本文参考http:/...
    jorion阅读 14,849评论 1 5
  • 接着上节 mutex,本节主要介绍atomic的内容,练习代码地址。本文参考http://www.cplusplu...
    jorion阅读 73,846评论 1 14
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • 最近经历了很多事情,失业,失恋,再就业,再有人追,这短短的十几天内发生的事情,真的让我应接不暇,甚至没有停下来好好...
    朝阳孤鹜阅读 229评论 0 0
  • 26日晚2个多小时的学习,让第四期大师课学员们收获颇多,也纷纷晒出了自己的感悟!
    九一同桌教育阅读 638评论 0 0