64位系统上的指针仍然是4字节对齐(类似于32位系统上的双精度)?还是他们注意到8字节对齐?
例如,在64位系统上,以下数据结构有多大:
struct a { void* ptr; char myChar; }
指针由8个字节对齐,为字符产生7个字节的填充(total = 8 8 = 16)?或者指针是4字节对齐(4字节4字节),导致3个字节的填充(total = 4 4 4 = 12)?
谢谢,
瑞安
解决方法
数据对齐和打包是实现特定的,通常可以从编译器设置(甚至使用编译指示)更改.
但假设您使用的是默认设置,大多数(如果不是全部)编译器的结构应该总共为16个字节.原因是因为计算机读取其本机字大小的数据块(在64位系统中为8个字节).如果要将其填充到4字节偏移量,则下一个结构将不会正确填充到64位边界.例如在arr [2]的情况下,阵列的第二个元素将以12字节偏移开始,而不是在机器的本机字节边界.