64bits v 32bits
以下是数据在堆栈和指针赋值中的未对齐示例。对指针变量的赋值使用的内存地址不匹配 8 字节边界,因为它是从“temp”数组的第二个字符开始的。
char temp[10];
double *var;
var=(double *)(&temp[1]);
在最佳情况下,诸如此类的未对齐会影响性能。代码的速度以及可执行文件的大小都会受到负面影响。这是因为编译器将添加额外的代码来修正未对齐,因而对取消引用的内存空间执行简单的读写操作都需要“先对齐后操作”这个过程。
============================
可以解下?
[解决办法]
那不已经说得很明白了吧?
double需要从8的整数倍的地址开始。
[解决办法]
你可以看看反汇编出来的代码