gpt4 book ai didi

c++ - new char 实际上是否保证了类类型的对齐内存?

转载 作者:IT老高 更新时间:2023-10-28 13:23:52 24 4
gpt4 key购买 nike

通过 new char[sizeof(T)] 分配一个缓冲区,保证为 T 类型分配正确对齐的内存,其中 的所有成员T 有它们自然的、实现定义的对齐方式(也就是说,您没有使用 alignas 关键字来修改它们的对齐方式)。

我在这里的一些答案中看到了这个保证,但我并不完全清楚标准是如何达到这个保证的。标准的 5.3.4-10 给出了基本要求:本质上 new char[] 必须与 max_align_t 对齐。

我缺少的是表示 alignof(T) 将始终是最大值为 max_align_t 的有效对齐方式。我的意思是,这似乎很明显,但结构的对齐结果是否必须最多为 max_align_t?甚至第 3.11-3 点说可能支持扩展对齐,所以编译器可以自己决定一个类是过度对齐的类型吗?

最佳答案

保证表达式 new char[N]new unsigned char[N]为任何对象返回足够对齐的内存。见§5.3.4/10"[...] 对于 char 和 unsigned char 数组,它们之间的区别new-expression 的结果和分配返回的地址函数应是最严格基本函数的整数倍大小不大于任何对象类型的对齐要求 (3.11)比正在创建的数组的大小。 [注:因为分配假设函数返回指向存储的指针适本地对齐任何类型的对象与基本对齐,这种对数组分配开销的约束允许将字符数组分配到其他对象的常见习语稍后将放置类型。 ——尾注]"。

当然,从风格的角度来看:如果您想要分配原始内存,这样说更清楚:operator new(N)。从概念上讲,new char[N] 创建 N char; operator new(N) 分配 N 个字节。

关于c++ - new char 实际上是否保证了类类型的对齐内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10587879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com