C 和 C++ 在运行时对齐指针的合法性上有区别吗?

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

假设

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

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

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

uintptr_t
void*
char*
不行)。

C 和 C++ 在使用此类表达式的合法性方面有何不同?

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

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

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

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