如何确定地址是否缓存对齐?

atb*_*atb 8 c++ c++11

是否符合C++ 11标准(或者,如果不符合,至少通常可接受)的方式来确定地址是否与缓存行边界对齐?

像这样的事情:

T* p = SOMETHING;
bool aligned = reinterpret_cast< std::uintptr_t > (p) % CACHE_LINE_SIZE == 0;
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 3

如果您有符合 C++11 的编译器,那么它的文档会告诉您。

正如 Igor 在评论中已经提到的,规则reinterpret_cast包括:

指针可以显式转换为任何足够大以容纳它的整型。映射函数是实现定义的

该术语不仅仅意味着“不可移植”,它还增加了特定要求,见 1.3.10:

违背执行的行为

行为,对于格式良好的程序构造和正确的数据,这取决于实现并且每个实现都记录了

如果您的编译器没有记录转换为整数的指针是否实际上是内存地址,那么它就不是 C++ 编译器。