结构体中的内存对齐操作
来源:互联网 发布:三轴点胶机编程教学 编辑:程序博客网 时间:2024/06/05 10:05
再说这个之前,先看看下面一个结构体的大小是多少:
struct data{ char a; int b; char c;}
答案是12!按照一般逻辑思路各个成员的大小加起来不就是了么?
但是实际的情况并不是这样的,结构体在实际的内存分配中需要进行内存的对齐操作。
这里再说这个之前,先说说偏移量,结构体变量中的成员的地址和结构体变量地址的差值称为偏移量。
编译器在编译源代码的过程中,会遵循下面两个原则进行对齐操作:
1、结构体中的成员变量的偏移量必须是成员大小的整数倍;
2、结构体的大小必须是所有成员大小的整数倍;
接下来,我们剖析上面的结构体:
变量大小 struct data{ 偏移量 补齐后 1 char a; 0 0 4 int b; 1 4 1 char c; 4 4 }经过偏移量的补齐操作,最终结构体大小为(1+(4-1))+(4+(4-4))+1=9满足了原则1。但是不满足原则2,还需要调整,对空间再扩展3,最终为大小为12字节。
而实际的使用中只用了6个字节。使用率只有一半,这样的使用效率特别差,怎么提高利用率呢?可以这样调整:
变量大小 struct data{ 偏移量 4 int b; 0 1 char a; 4 1 char c; 1 }这样调整后,不需要进行原则1的对齐操作,大小为4+1+1=6。只需要进行原则2的调整为8.相对于第一种情况节省了4个字节的空间。有时候结构体空间的重排列可以节省一些内存空间,这在有些程序中是极其需要的~
0 0
- 结构体中的内存对齐操作
- 结构体中的内存对齐
- C/C++中的结构体对齐问题(内存对齐)
- C/C++中的结构体对齐问题(内存对齐)
- C/C++中的结构体对齐问题(内存对齐)
- C/C++中的结构体对齐问题(内存对齐)
- C/C++中的结构体对齐问题(内存对齐)
- C/C++中的结构体对齐问题(内存对齐)
- C/C++中的结构体对齐问题(内存对齐)
- C/C++中的结构体对齐问题(内存对齐)
- C/C++中的结构体对齐问题(内存对齐)
- C/C++中的结构体对齐问题(内存对齐)
- C/C++中的结构体对齐问题(内存对齐)
- 结构体对齐(内存对齐)
- 内存对齐.结构体对齐
- 内存对齐.结构体对齐
- 内存对齐.结构体对齐
- 内存对齐 结构体对齐
- PAT (Basic Level) Practise (中文)1002. 写出这个数 (20) C语言
- shape和selector的结合使用
- Windows 中OpenBlas 的安装 - Windows 32bit 适用
- 消息数提醒BadgeView简单实用
- 收藏网站38
- 结构体中的内存对齐操作
- 收藏网站39
- Http和Socket区别
- 生成随机数
- poj2057--The Lost House(树状dp,求期望)
- mysql max_allowed_packet查询和修改
- iOS 与webService
- 关于block使用的5点注意事项
- ZOJ 3469 Food Delivery -- 区间dp