首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存对齐检查

内存对齐检查
EN

Stack Overflow用户
提问于 2011-06-05 08:54:41
回答 3查看 13.3K关注 0票数 18

我想检查分配的内存是否对齐。我使用的是_aligned_malloc(size, align);,它返回一个指针。例如,我可以通过简单地将指针内容除以16来检查它吗?如果指针内容可以被16整除,这是否意味着内存被16个字节对齐?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-05 08:58:53

根据定义,“对齐”指针意味着指针的数值可以被N整除(其中N是所需的对齐方式)。为了检查这一点,将指针转换为合适大小的整数,取模数N,并检查结果是否为零。在代码中:

代码语言:javascript
复制
bool is_aligned(void *p, int N)
{
    return (int)p % N == 0;
}

如果你想手动检查指针值,只需查看指针的十六进制表示,看看它是否以所需的0位数结束。例如,16字节对齐的指针值将始终以四个零位结束。

票数 25
EN

Stack Overflow用户

发布于 2011-06-05 09:12:41

在现代的Unix系统中,malloc返回的指针很可能是16字节对齐的,因为这是像SSE这样的东西所必需的。要检查2的幂是否对齐,您可以使用:

代码语言:javascript
复制
((unsigned long)p & (ALIGN - 1)) == 0

这只是(p % ALIGN) == 0的一个更快的版本。(如果ALIGN是一个常量,您的编译器可能会自动使用上面更快的版本。)

票数 8
EN

Stack Overflow用户

发布于 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

(高阶对齐似乎有例外,这无论如何都是一个不寻常的要求。)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6240330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档