You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++自定义重载new操作符的对齐要求及违规后果问询

C++自定义重载new操作符的对齐要求问题

我想了解C++中自定义重载new操作符的实际要求,重点关注未指定对齐时返回指针的对齐问题。示例代码如下:

void* operator new(std::size_t sz)
{
}

我注意到预处理器宏__STDCPP_DEFAULT_NEW_ALIGNMENT__,但不确定它是否是所有内存分配的最小对齐值。C++标准中对分配函数返回指针的要求是:

...该存储可对齐任何无扩展对齐且大小符合要求的对象。

我的问题分为两点:

  1. 这个自定义new操作符针对指定大小的内存,最小对齐要求是什么?
  2. 如果返回指针的对齐度低于要求,会有什么后果?是否属于未定义行为(UB)?

补充说明:
我调用new创建一个无对齐指定、需要零初始化的对象时,编译器会假设该指针是16字节对齐的,进而使用movaps指令将寄存器内容复制到16字节对齐的内存位置。但如果自定义new操作符返回的是8字节对齐的指针,movaps调用可能会崩溃,因此这里必然存在硬性要求。

内容的提问来源于stack exchange,提问作者jslap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:03:11