【发布时间】:2017-02-24 21:21:23
【问题描述】:
开始尝试放置 new 和 delete 以及内存对齐,感觉就像是爸爸蓝精灵实验室里的聪明蓝精灵。
假设我有一个对象,例如,
struct obj {
...
};
我想在对齐的存储中分配一个包含N 此类对象的数组。我要做的是:
obj *buf = new (static_cast<obj*>(_aligned_malloc(sizeof(obj) * N, 64))) obj[N];
也就是说,我将placement new与_aligned_malloc结合使用。
问
- 这种分配对齐存储的方式是否合适?
- 之后可以(可能不可以)使用
delete []来解除分配还是我需要一些特殊处理?
附言
我知道_aligned_malloc 不是标准的,而是特定于 MVSC 的。
【问题讨论】:
-
显式调用析构函数不是更合适吗?我的意思是
buf->~obj()之类的东西,然后可以释放内存? -
@W.F.我有个提示,我必须按照你的建议做一些事情,然后打电话给
_aligned_free。 -
附带说明:
static_cast<obj*>在这里真的有必要吗? AFAIK 新位置将void*作为参数。 -
你不需要 static_cast
-
@tehcnically 数组放置 new 不可用,因为它可能需要您在 malloc 中不允许的未指定的簿记开销。 “正确”的方法是循环 N 次,每次调用非数组放置 new
标签: c++ visual-c++ memory-alignment placement-new