首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据对齐差异

数据对齐差异
EN

Stack Overflow用户
提问于 2013-11-25 13:53:03
回答 2查看 67关注 0票数 4

我有以下代码:

代码语言:javascript
复制
    int byte_align(void * ptr)
    {
        int power = 2, n = 1, result = 0;
        size_t address = reinterpret_cast<size_t>(ptr);
        while(address%power == 0)
        {
            power *=2;
            result = n;
            n++;
        }
        return result;
    }

当我执行这个函数(用-O3在Ubuntu上用g++4.6编译)时,我会在每个运行不同的值(4、5、7、8)上得到一个双变量。为什么?在另一台具有相同操作系统和相同编译器的PC上,我得到的结果总是3。

产生这些结果的其他可能原因是什么?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-25 14:09:22

纯粹的机会。根据机器的不同,双对齐必须对齐倍数为4或倍数为8(在普通机器上)。对齐8将返回3或更多,因为任何对齐的16,32,64.也将对齐8。

您没有说明指针来自何处,也没有说明您正在执行的上下文(DLL等),因此很难说得更多。出于安全考虑,许多系统在每次运行程序时都会将静态数据、堆栈和/或空闲空间放置在不同的地址。

票数 5
EN

Stack Overflow用户

发布于 2013-11-25 14:06:21

在具有大地址空间的机器上,变量可以位于大于4个字节的边界上(对于32位对齐)。

使用以下示例尝试您的功能:

0x100,0x101,0x102,0x104,0x108,0x110

根据您提供的信息,我只能说程序可能不在每次调用的相同位置。因此,指针可能具有不同的值。

数据也是如此。

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

https://stackoverflow.com/questions/20194863

复制
相关文章

相似问题

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