C/C++字节对齐
来源:互联网 发布:it行业工资 编辑:程序博客网 时间:2024/06/14 09:40
1 背景
需要字节对齐的根本原因在于CPU访问数据的效率问题数组 ,对于标准数据类型,它的地址只要是它的长度的整数倍就行了,而非标准数据类型按下面的原则对齐:
数组 :按照基本数据类型对齐,第一个对齐了后面的自然也就对齐了。
联合 :按其包含的长度最大的数据类型对齐。
结构体: 结构体中每个数据类型都要对齐。
本文重点分析结构体的对齐方式。
2 结构体中字节对齐的案例分析
2.1 结构体一
struct A { char a; // 1字节对齐 int b; // 4字节对齐 short c; // 2字节对齐} a; // 由于本结构体最大的成员是4字节对齐,因此本结构体整体以4字节对齐字节对齐情况:
sizeof(A) = 12; // struct A以4字节对齐,因此后面补充两个字节&a.a = 0;&a.b = 4; // 地址4字节对齐&a.c = 8;2.2 结构体二
struct A { char a; // 1字节对齐 short b; // 2字节对齐 int c; // 4字节对齐};字节对齐情况:
sizeof(A) = 8;&a.a = 0;&a.b = 2; // 地址2字节对齐&a.c = 4; // 地址4字节对齐
3 g++中设置直接对齐的方法: __attribute__((packed))
#include <stdint.h>struct A { uint16_t cmd; uint32_t size;} __attribute__ ((packed));int main(void){ printf("sizeof(A) = %d\n", sizeof(A));}
如上所示,添加了__attribute__((packed))后,A占用的空间为6字节,而不是8字节。
[1]C语言字节对齐
[2]5分钟搞定内存字节对齐
0 0
- C/C++字节对齐
- C/C++字节对齐
- c/c++字节对齐
- C/C++字节对齐
- c/c++字节对齐
- C语言字节对齐
- C语言字节对齐
- C/C++字节对齐
- c语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- python简单实验程序
- 使用Spring Data JPA简化JPA开发
- fd_set具体是怎样实现的 http://blog.chinaunix.net/uid-20680966-id-1896524.html
- UIImagePickerController从拍照、图库、相册获取图片
- iOS 9的App Thinning方案如何节省存储空间
- C/C++字节对齐
- zzuli OJ 1016: 银行利率
- C语言中最常用标准库函数
- Android Studio 错误 com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
- Hibernate关联之 一对多连接表双向关联
- c#模拟请求获取与设置cookies
- String,StringBuffer与StringBuilder的区别??
- mongo的登录认证与角色管理。
- c++中冒号(:)和双冒号(::)的用法