C++自定义重载new操作符的对齐要求及违规后果问询
C++自定义重载new操作符的对齐要求问题
我想了解C++中自定义重载new操作符的实际要求,重点关注未指定对齐时返回指针的对齐问题。示例代码如下:
void* operator new(std::size_t sz) { }
我注意到预处理器宏__STDCPP_DEFAULT_NEW_ALIGNMENT__,但不确定它是否是所有内存分配的最小对齐值。C++标准中对分配函数返回指针的要求是:
...该存储可对齐任何无扩展对齐且大小符合要求的对象。
我的问题分为两点:
- 这个自定义
new操作符针对指定大小的内存,最小对齐要求是什么? - 如果返回指针的对齐度低于要求,会有什么后果?是否属于未定义行为(UB)?
补充说明:
我调用new创建一个无对齐指定、需要零初始化的对象时,编译器会假设该指针是16字节对齐的,进而使用movaps指令将寄存器内容复制到16字节对齐的内存位置。但如果自定义new操作符返回的是8字节对齐的指针,movaps调用可能会崩溃,因此这里必然存在硬性要求。
内容的提问来源于stack exchange,提问作者jslap
相关产品推荐
相关产品推荐

