是否符合C++ 11标准(或者,如果不符合,至少通常可接受)的方式来确定地址是否与缓存行边界对齐?
像这样的事情:
T* p = SOMETHING;
bool aligned = reinterpret_cast< std::uintptr_t > (p) % CACHE_LINE_SIZE == 0;
Run Code Online (Sandbox Code Playgroud)
如果您有符合 C++11 的编译器,那么它的文档会告诉您。
正如 Igor 在评论中已经提到的,规则reinterpret_cast包括:
指针可以显式转换为任何足够大以容纳它的整型。映射函数是实现定义的。
该术语不仅仅意味着“不可移植”,它还增加了特定要求,见 1.3.10:
违背执行的行为
行为,对于格式良好的程序构造和正确的数据,这取决于实现并且每个实现都记录了
如果您的编译器没有记录转换为整数的指针是否实际上是内存地址,那么它就不是 C++ 编译器。