c++ - 数据对齐的差异

标签 c++ alignment

我有以下代码:

    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;
    }

当我执行这个函数时(在带有 g++4.6 的 Ubuntu 上用 -O3 编译),我在每次运行不同的值(4、5、7、8)时得到一个 double 变量。为什么?在另一台具有相同操作系统和相同编译器的 PC 上,结果总是 3。
造成这些结果的其他可能原因是什么?
谢谢!

最佳答案

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

你不说指针来自哪里,也不说上下文 你正在执行的(DLL等),所以很难多说。 许多系统将放置静态数据、堆栈和/或空闲 每次运行时在不同地址的空间竞技场 程序,出于安全原因。

关于c++ - 数据对齐的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20194863/

相关文章:

c++ - 为什么 cmath pow 给出不准确的答案?

c++ - 如何使用 GDI+ 库解码内存中的 jpeg?

c++ - 如果两个数字是相同的 0,则在 C++ 和 Root 中创建 0 条件

html - 具有对齐中心的 css 内联 block

css - 将位置为 : relative 的元素居中

flutter - 如何在 google flutter 中对齐行中的文本小部件?

c++ - c++中多个+=运算符引起的段错误?

c++ - 在后续运行 'make' 时强制刷新 cmake 脚本

java - JFreeCharts 图例文本和颜色框不对齐

javascript - 如何在 Qooxdoo 中对齐图像?