具有对齐存储的动态内存分配
Dynamic memory allocation with aligned storage
我对使用std::aligned_storage
和需要动态分配时的对齐要求有点困惑。例:
using storage = typename std::aligned_storage<sizeof(T), std::alignment_of<T>::value>::type;
storage* pool;
pool = ::new storage[num_obj];
合法吗?新运算符不返回对齐记忆,那么结果是否正确?
C++11 标准要求分配函数(如::operator new
返回与alignof(std::max_align_t)
[basic.stc.dynamic/2] 对齐的内存:
返回的指针应适当对齐,以便可以转换为具有基本对齐要求的任何完整对象类型的指针 [...]
因此,只要您通过new
表达式创建的对象的类型不是过度对齐的类型(需要比alignof(std::max_align_t)
更严格的对齐方式(,一切都很好。对于过度对齐的类型,您确实必须分配足够大小的存储空间来手动对齐指针,例如,使用std::align
,然后在合适的地址构造对象,例如,通过放置 new...
从 C++17 开始,new
会自动处理此问题。要分配需要比__STDCPP_DEFAULT_NEW_ALIGNMENT__
更严格的对齐的存储(分配函数至少需要提供的对齐(,new-expression将调用一个分配函数,该分配函数作为参数显式给定要分配的存储的对齐方式 [expr.new]/14 ...
相关文章:
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- c++ 动态内存 堆栈中的分配
- 给定特定内存地址的数组的动态内存分配
- 释放动态内存时C++错误
- 我刚刚了解了C++中的动态内存分配
- 无法删除布尔动态内存分配
- 有没有办法找到动态内存大小,比如大小?
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 具有对齐存储的动态内存分配
- 指向数组unique_ptr在调用 release() 后会自动释放动态内存,这是真的吗?
- 在cpp中使用boost-python的python代码是否进行动态内存分配
- 我应该在这个程序中使用静态内存分配还是动态内存分配
- C++ 模板函数中的动态内存分配
- 指向动态内存中结构中的变量时出现问题
- C++具有动态内存分配的 constexpr 函数
- 动态内存分配错误
- 按引用传递和动态内存分配之间的区别是什么