c语言结构体对齐
来源:互联网 发布:淘宝买家延迟收货时间 编辑:程序博客网 时间:2024/06/05 07:56
今天遇到一个结构体没有对齐的问题,导致指向结构体的指针递增的时候,偏移出错。
struct x{uint64 a;uint16 b;uint16 c;uint32 d;uint8 arr[4];}
如果编译器选择8字节(Packs structures on 8-byte boundaries (default).)对齐,那么这个结构体的大小是多少呢?
答案是:8+2+2+4+4+4 = 24;
MSDN是这样说的:
When you specify this option, each structure member after the first is stored on either the size of the member type orn-byte boundaries (wheren is 1, 2, 4, 8, or 16), whichever is smaller.
第一个成员之后的成员放置在min(自身大小,Zpn指定的大小)的边界上。
1, 所以结构体对齐,包含2个方面,一个成员的对齐,还有就是最后整个结构体的对齐。
2, 一般情况下设置对齐大小是实际机器大小的整数倍,一般就是一倍,也就是相等。
实例:
// compile with /Zp:4struct x{ int32 a; char b; int16 c; char arr[5]}
- C语言结构体对齐
- c语言结构体对齐
- c语言结构体对齐
- C语言结构体对齐
- C语言结构体对齐
- c语言结构体对齐
- C语言结构体对齐
- C语言结构体对齐
- C语言结构体对齐
- C语言结构体对齐
- c语言结构体对齐
- C语言结构体对齐
- C语言 结构对齐
- C语言结构体中的数据对齐
- C语言中结构体对齐问题
- 关于C语言中的结构体对齐
- 面试必考 - C语言结构体对齐
- C语言中结构体对齐问题
- sdk每次一记(一)
- 从决策树学习谈到贝叶斯分类算法、EM、HMM
- Socket 编程 windows到Linux代码移植遇到的问题
- Android号码匹配位数修改
- char str[] 和 char *str 的区别
- c语言结构体对齐
- PrimeFaces 3.0发布:面向JSF2的Ajax、移动与IE 9组件
- ubuntu12.04的ATI驱动的安装
- java中的注解
- windows 2008 NLB 配置(二)
- SSL如何工作
- 5-17
- 阻塞与死锁(二)——各种操作对锁的申请
- gdb