标准中的哪个地方说'new`返回的每个分配都与`std :: max_align_t`对齐?

时间:2015-10-10 22:19:15

标签: c++ language-lawyer c++14 memory-alignment

In this video,在大约6.39时,演示者似乎说new始终返回与std::max_align_t对齐的内存,这是有道理的,因为operator new不知道任何事情关于被分配的变量的类型。也就是说,编译器必须选择最严格的对齐方式。但我在标准中找不到这个。

演示者还说,当new用于分配charunsigned char数组时,此规则不适用。在这种情况下,对齐取决于大小。但这对我来说也不清楚。

1 个答案:

答案 0 :(得分:3)

这是[basic.stc.dynamic.allocation] / 2:

  

分配功能尝试分配所请求的存储量。如果成功,它应该   返回存储块的起始地址,其长度以字节为单位应至少与   要求的大小。 [...] 返回的指针应适当对齐,以便可以转换   到具有基本对齐要求的任何完整对象类型的指针(3.11)然后使用   访问分配的存储中的对象或阵列(直到通过调用显式释放存储   到相应的解除分配功能)。 [...]