Overview
浏览时运算符 new,运算符 new[] - cppreference.com https://en.cppreference.com/w/cpp/memory/new/operator_new,似乎我们有很多选项来分配具有特定对齐要求的对象数组。但是,没有指定如何使用它们,而且我似乎找不到正确的 C++ 语法。
我可以以某种方式显式调用该运算符,还是编译器会自动推断重载? :
void* operator new[]( std::size_t count, std::align_val_t al );
看着Bartek 的编码博客 https://www.bfilipek.com/2019/08/newnew-align.html,看起来编译器会根据对齐要求是否大于自动选择重载__STDCPP_DEFAULT_NEW_ALIGNMENT__
(在 64 位机器上通常为 16)。
Question
是否可以手动选择过载new
在某些情况下操作员?有时我可能希望分配的块以某种方式对齐(我假设对齐始终是 2 的幂,并且可能大于 16)。
编译器的选择
在可预见的将来,我可能会使用 GCC 和 C++ >= 17。
附加参数operator new
在类型之前的括号内传递:
#include <new>
int* allocate() {
return new (std::align_val_t(16)) int[40]; // 128-bit alignment
// will call `void* operator new[](size_t, align_val_t)`
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)