加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C 64位指针对齐

发布时间:2020-12-16 03:14:18 所属栏目:百科 来源:网络整理
导读:64位系统上的指针仍然是4字节对齐(类似于32位系统上的双精度)?还是他们注意到8字节对齐? 例如,在64位系统上,以下数据结构有多大: struct a { void* ptr; char myChar;} 指针由8个字节对齐,为字符产生7个字节的填充(total = 8 8 = 16)?或者指针是4字节对
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字节偏移开始,而不是在机器的本机字节边界.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读