Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数据对齐的差异_C++_Alignment - Fatal编程技术网

C++ 数据对齐的差异

C++ 数据对齐的差异,c++,alignment,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;

我有以下代码:

    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;
    }
int字节对齐(void*ptr)
{
整数幂=2,n=1,结果=0;
尺寸地址=重新解释铸件(ptr);
while(地址%power==0)
{
功率*=2;
结果=n;
n++;
}
返回结果;
}
当我执行这个函数时(在Ubuntu上用-O3和g++4.6编译),每次运行不同的值(4,5,7,8),我都会得到一个双变量。为什么?在另一台具有相同操作系统和相同编译器的PC上,我的结果总是3。
产生这些结果的其他可能原因是什么?

谢谢大家!

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

使用以下示例尝试您的函数:
0x100、0x101、0x102、0x104、0x108、0x110

从您提供的信息来看,我只能说程序可能不会在每次调用时都位于同一位置。因此,指针可能具有不同的值


数据也是如此

纯属偶然。根据机器的不同,必须对齐双面胶 在4的倍数或8的倍数上(在普通机器上)。 对齐8将返回3。或者更多,因为 这是对齐的16,32,64。。。也将与8对齐

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

您是为32位还是64位编译?您将什么作为ptr传递?@Pukku:我将地址传递给double,例如
double x;func&x