我想检查分配的内存是否对齐.我正在使用 _aligned_malloc(size, align);And它返回一个指针.我可以通过简单地将指针内容除以16来检查它吗?如果指针内容可被16整除,是否意味着内存对齐了16个字节?
Gre*_*ill 22
根据定义,"对齐"指针意味着指针的数值可被N整除(其中N是所需的对齐).要检查这一点,将指针转换为适当大小的整数,取模数N,并检查结果是否为零.在代码中:
bool is_aligned(void *p, int N)
{
return (int)p % N == 0;
}
Run Code Online (Sandbox Code Playgroud)
如果要手动检查指针值,只需查看指针的十六进制表示,看它是否以所需的0位数结束.例如,16字节对齐的指针值总是以四个零位结束.
在现代Unix系统上,返回的指针malloc很可能是16字节对齐的,因为SSE之类的东西需要这样做.要检查2的幂的对齐,您可以使用:
((unsigned long)p & (ALIGN - 1)) == 0
Run Code Online (Sandbox Code Playgroud)
这只是一个更快的版本(p % ALIGN) == 0.(如果ALIGN是常量,您的编译器可能会自动使用上面的更快版本.)
| 归档时间: |
|
| 查看次数: |
11483 次 |
| 最近记录: |