在以下情况下,是否可以分配未对齐的对象?
Is it possible to allocate misaligned objects in the following case?
假设我们有一些有效的类型T。给定以下代码:
char* p = static_cast<char*>(malloc(sizeof(T) * 32));
T* t1 = new (p) T;
p += sizeof(T);
T* t2 = new (p) T;
...
现在是否有可能t2
根据其对齐限制无法正确对齐?
取决于T
是什么。保证与将指针直接存储到T*
中相同。如果指针 P 与 N 字节边界对齐,则 P+N 也与 N 对齐。此外,大小必须是对齐方式的倍数。malloc
记忆保证与max_align_t
对齐对齐。
如果指针是过度对齐的类型,即对齐要求高于max_align_t
的类型,则不保证指针T
对齐。
它将正确对齐,但请注意,指针算术是以类型大小的倍数完成的,因此
p += sizeof(T);
将指针按大小 (T) 单位而不是 1 前进。"++p;"将给出下一个 T 单位。
相关文章:
- 哪些值存储在对齐的结构/类对象的填充字节中
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 对象地址是否保证是其类型对齐的倍数
- MIPS 和 x86_64 之间的对象对齐差异
- Sizeof 舍入到对齐方式,但编译器仍将对象放在剩余的字节中
- 自动热键:重新映射 MS Visio 的快捷方式,以将手动选择的对象对齐到顶部(好像按:"AlignTop")
- 在以下情况下,是否可以分配未对齐的对象?
- 如何分配内存对齐C++对象数组?
- STD :: Aligned_Storage如何正确对齐任何对象的存储
- std::可选和提升::可选是否尊重托管对象的对齐限制?
- 如何强制对齐堆分配的对象
- 将对象位置与网格对齐
- 对象数组对齐与 __attribute__aligned() 或 alignas()
- 对象数组作为链表中的字符数组 - 我对对齐的假设是否有效
- 如何使用指针合法地访问对齐错误的对象
- 我不明白在下面的代码中将 char buffer[] 与 X 类型的对象对齐的原因
- 标准是否要求自动存储中的对象对任何类型都具有正确的对齐方式(例如malloc)
- xcode中的对象字节对齐
- 子对象的对齐小于基对象的对齐
- 具有对齐成员的对象的动态分配-可能的解决方案