struct对齐问题

ChinaUnix最近有个贴子讨论热烈,在这里记录一下我的理解,struct的对齐是遵照下列二个条件中最小的一个进行的: 1.#pragma pack(N)中N指定的值 2.struct中最大的成员(请注意不是指sizeof值最大的那个,而应当是__alignof__值最大的那个) 对于double等几个类型,它的alignof值是可通过编译开关-mno-align-double和-malign-double来控制的,其中-mno-align-double表示double的alignof值为字长,而-mno-align-double表示alignof值为两个字长。但是alignof的值不会超过sizeof值,且其总是2的幂数,所以在64位上double的alignof和sizeof总是相同的。 示例: 在i386和x86_64上(其它不清楚): #pragma pack(M) struct X {     int64_t a;     int32_t c;     int64_t b; }; #pragma pack() 字节对齐不一定是按M对齐,而是按M、结构体的字节最大成员和alignof(long)中最小的一个对齐,而在powerpc(AIX)上,则按M和结构体的字节最大成员中的最小一个对齐。 C++11已经支持alignof操作符,之前的版本可以使用GCC提供的宏:__alignof__,可以在代码中直接使用。 参考阅读:http://blog.chinaunix.net/uid-20682147-id-3761787.html(Linux内核list/hlist解读)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Alice

demo3同通讯录展示的方式分组排序

按A-Z顺序分组展示 有些项目中会需要这样的需求。形成类似于上述的界面。类似于通讯录里边的排序。实现的效果:所有的数据展示的时候,能够分组展示。顺序按照A-Z的...

25190
来自专栏守候书阁

编写自己的代码库(javascript常用实例的实现与封装--续)

这个系列的上一篇文章(编写自己的代码库(javascript常用实例的实现与封装))总结了34个常见的操作。但是在开发中,常见的实例又何止这么多个,经过这些日子...

16130
来自专栏Hongten

spring开发_使用p名称空间配置属性

http://www.cnblogs.com/hongten/gallery/image/112563.html

13020
来自专栏finleyMa

PHP7 新语法总结,更新7.2注意事项

太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1

48720
来自专栏Java Web

初学Java Web(6)——JSP学习总结

为什么要学习 JSP Servlet 的短板: Servlet 的出现,是为了解决动态输出网页的问题。 虽然这样做目的能达到,但是存在一些缺陷: 在 Servl...

50270
来自专栏空帆船w

Android 编码规范

小驼峰命名(lowerCamelCase):除第一个单词以外,每一个单词的第一个字母大写。

29830
来自专栏跟着阿笨一起玩NET

C# Eval在aspx页面中的用法及作用

34820
来自专栏林欣哲

区块链开发之Go语言—IO操作

本篇文章是对区块链开发中的Go语言中常用的io操作的库做一个梳理 io,最基本的io Reader type Reader interface { Re...

39280
来自专栏清晨我上码

异步任务执行的设计模式

28430
来自专栏coder修行路

Go实现短url项目

首先说一下这种业务的应用场景: 把一个长url转换为一个短url网址 主要用于微博,二维码,等有字数限制的场景 主要实现的功能分析: 把长url的地址转换为短u...

46650

扫码关注云+社区

领取腾讯云代金券