伤心的内存对齐~~~
来源:互联网 发布:单元刚度矩阵 编辑:程序博客网 时间:2024/04/29 21:53
/*
* 结构体中的内存对齐
*/
#include <stdio.h>
#pragma pack(4) //指定按4字节对齐
int main(void)
{
struct align {
struct tmp {
char a;
unsigned short int i;
char b;
}half;
long li;
}ali;
printf("size of struc align is %d ",sizeof(ali));
printf("size of struc tmp is %d ",sizeof(ali.half));
printf("size of long is %d ",sizeof(long));
printf("size of unsigned short int is %d ",sizeof(unsigned short int));
return 0;
}
#pragma pack(4) //指定按4字节对齐
int main(void)
{
struct align {
struct tmp {
char a;
unsigned short int i;
char b;
}half;
long li;
}ali;
printf("size of struc align is %d ",sizeof(ali));
printf("size of struc tmp is %d ",sizeof(ali.half));
printf("size of long is %d ",sizeof(long));
printf("size of unsigned short int is %d ",sizeof(unsigned short int));
return 0;
}
在align结构体中有两个成员:half和li,其中half为struct tmp类型,一个为long类型。
只有当#pragma 预处理器规定的对齐要求严于struct中最大数据成员字节数时,才按#pragma 指定的字节数对齐。当宽于struc中的要求时,按struct中最大字节成员变量长度来对齐。
这里,在struct align中,首先struct tmp内的成员变量要对齐:1+1 2 1+1 其中+代表填充,+后面的数字代表填充的字节数,这样tmp 占6字节,然后再考虑struct tmp类型的half与long类型的li:6 4+2
所以输出:
size of struc align is 12
size of struc tmp is 6
size of long is 4
size of unsigned short int is 2
- 伤心的内存对齐~~~
- 内存地址的对齐
- 内存对齐的问题
- 操作系统的内存对齐
- C++的内存对齐
- 内存对齐的问题
- ARM的内存对齐
- 所谓的 内存对齐
- 类的内存对齐
- 内存对齐的思考
- c++的内存对齐
- gcc的内存对齐
- gcc 的内存对齐
- 内存对齐的宏
- 简单的内存对齐
- 内存对齐的影响
- 内存对齐的问题
- 内存对齐的规则
- 专家的预言有多准?
- 8.20-8.26
- [软件]APMXE和NetBox
- 如何隐藏网页中的层DIV
- 使用JAVA的Properties
- 伤心的内存对齐~~~
- 上传loading条的实现
- Linux系统内核文件Cache管理机制
- 90%男人会做的事
- 常用到的.net工具
- 肠胃炎又犯了,恼人,似乎和它结成了朋友.
- 网页背景渐变色
- Eclipse中优秀的插件
- distinguish between variable and field