In this video,在大约6.39时,演示者似乎说new
始终返回与std::max_align_t
对齐的内存,这是有道理的,因为operator new
不知道任何事情关于被分配的变量的类型。也就是说,编译器必须选择最严格的对齐方式。但我在标准中找不到这个。
演示者还说,当new
用于分配char
或unsigned char
数组时,此规则不适用。在这种情况下,对齐取决于大小。但这对我来说也不清楚。
答案 0 :(得分:3)
这是[basic.stc.dynamic.allocation] / 2:
分配功能尝试分配所请求的存储量。如果成功,它应该 返回存储块的起始地址,其长度以字节为单位应至少与 要求的大小。 [...] 返回的指针应适当对齐,以便可以转换 到具有基本对齐要求的任何完整对象类型的指针(3.11)然后使用 访问分配的存储中的对象或阵列(直到通过调用显式释放存储 到相应的解除分配功能)。 [...]