C++标准要求新char []产生对齐内存的意图是什么?

sha*_*oth 5 c++ memory-management

根据C++ 03标准,5.3.4/10

对于char和unsigned char的数组,new-expression的结果与分配函数返回的地址之间的差异应该是任何对象类型的最严格对齐要求(3.9)的整数倍,其大小不大于正在创建的数组的大小.

分配函数(operator new[]())也需要为任何可能的类型分配对齐的内存.所以引用的部分有效地说new char[sizeof(T)]应该产生适当的类型对齐的内存T.

这个要求的目的是什么?我可以调用operator new()(或operator new[]())保证返回正确对齐的内存并具有对齐的内存.我的意思是无论如何new char[]会打电话,operator new()[]所以我可以自己打电话.

引用要求的目的是什么?为什么不直接打电话operator new[]()

Jam*_*nze 3

我通常只是operator new直接调用,但标准的作者决定也允许使用它new char[]作为获取原始内存的一种手段。因此需要对齐。