是否可以在不违反严格别名的情况下对齐指针?

问题描述 投票:0回答:1

可以使用以下表达式来查找下一个正确对齐的地址:

(address + alignment - 1u) & ~(alignment - 1u)

但是,为了执行此操作,需要将地址转换为

uintptr_t
void*
char*
不行)。

这是否违反了严格别名?如果是这样,如何在不违反规则的情况下实施? (我知道禁用严格别名的编译器标志。我要求遵守该规则,而不是禁用它。)

c++ c language-lawyer allocator strict-aliasing
1个回答
0
投票

严格的别名在这里无关紧要。但是通过将指针转换为整数产生的值是实现定义的。使用

std::align
可以便携式地执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.