C 64位指针对齐

前端之家收集整理的这篇文章主要介绍了C 64位指针对齐前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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字节偏移开始,而不是在机器的本机字节边界.

原文链接:https://www.f2er.com/c/112080.html

猜你在找的C&C++相关文章