我想检查分配的内存是否对齐。我使用的是_aligned_malloc(size, align);,它返回一个指针。例如,我可以通过简单地将指针内容除以16来检查它吗?如果指针内容可以被16整除,这是否意味着内存被16个字节对齐?
发布于 2011-06-05 08:58:53
根据定义,“对齐”指针意味着指针的数值可以被N整除(其中N是所需的对齐方式)。为了检查这一点,将指针转换为合适大小的整数,取模数N,并检查结果是否为零。在代码中:
bool is_aligned(void *p, int N)
{
return (int)p % N == 0;
}如果你想手动检查指针值,只需查看指针的十六进制表示,看看它是否以所需的0位数结束。例如,16字节对齐的指针值将始终以四个零位结束。
发布于 2011-06-05 09:12:41
在现代的Unix系统中,malloc返回的指针很可能是16字节对齐的,因为这是像SSE这样的东西所必需的。要检查2的幂是否对齐,您可以使用:
((unsigned long)p & (ALIGN - 1)) == 0这只是(p % ALIGN) == 0的一个更快的版本。(如果ALIGN是一个常量,您的编译器可能会自动使用上面更快的版本。)
发布于 2011-06-06 05:05:57
malloc返回的内存对所有东西都是对齐的(例如,它通常使用对所有东西都有效的an对齐)*。这意味着,如果你有对齐问题,那是另一回事。
http://www.delorie.com/gnu/docs/glibc/libc_31.html
http://msdn.microsoft.com/en-us/library/ms859665.aspx
(高阶对齐似乎有例外,这无论如何都是一个不寻常的要求。)
https://stackoverflow.com/questions/6240330
复制相似问题