根据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[]()
?
1 回答
我通常直接调用
operator new
,但标准的作者决定也允许使用new char[]
作为获取原始内存的手段 . 因此对齐要求 .