详解结构体、类等内存字节对齐
来源:互联网 发布:ubuntu 安装selinux 编辑:程序博客网 时间:2024/05/23 13:38
- char A;
- int B;
- //by www.datahf.net zhangyu
- typedef struct T
- {
- char c; //本身长度1字节
- __int64 d; //本身长度8字节
- int e; //本身长度4字节
- short f; //本身长度2字节
- char g; //本身长度1字节
- short h; //本身长度2字节
- };
- //by www.datahf.net zhangyu
- typedef struct A
- {
- char c; //1个字节
- int d; //4个字节,要与4字节对齐,所以分配至第4个字节处
- short e; //2个字节, 上述两个成员过后,本身就是与2对齐的,所以之前无填充
- }; //整个结构体,最长的成员为4个字节,需要总长度与4字节对齐,所以, sizeof(A)==12
- typedef struct B
- {
- char c; //1个字节
- __int64 d; //8个字节,位置要与8字节对齐,所以分配到第8个字节处
- int e; //4个字节,成员d结束于15字节,紧跟的16字节对齐于4字节,所以分配到16-19
- short f; //2个字节,成员e结束于19字节,紧跟的20字节对齐于2字节,所以分配到20-21
- A g; //结构体长为12字节,最长成员为4字节,需按4字节对齐,所以前面跳过2个字节,
- //到24-35字节处
- char h; //1个字节,分配到36字节处
- int i; //4个字节,要对齐4字节,跳过3字节,分配到40-43 字节
- }; //整个结构体的最大分配成员为8字节,所以结构体后面加5字节填充,被到48字节。故:
- //sizeof(B)==48;
- //by www.datahf.net zhangyu
- #include "stdio.h"
- typedef struct A
- {
- char c;
- int d;
- short e;
- };
- typedef struct B
- {
- char c;
- __int64 d;
- int e;
- short f;
- A g;
- char h;
- int i;
- };
- typedef struct C
- {
- char c;
- __int64 d;
- int e;
- short f;
- char g;
- short h;
- };
- typedef struct D
- {
- char a;
- short b;
- char c;
- };
- int main()
- {
- B *b=new B;
- void *s[32];
- s[0]=b;
- s[1]=&b->c;
- s[2]=&b->d;
- s[3]=&b->e;
- s[4]=&b->f;
- s[5]=&b->g;
- s[6]=&b->h;
- s[7]=&b->g.c;
- s[8]=&b->g.d;
- s[9]=&b->g.e;
- s[10]=&b->i;
- b->c= 0x11;
- b->d= 0x2222222222222222;
- b->e= 0x33333333;
- b->f=0x4444;
- b->g.c=0x50;
- b->g.d=0x51515151;
- b->g.e=0x5252;
- b->h=0x66;
- int i1=sizeof(A);
- int i2=sizeof(B);
- int i3=sizeof(C);
- int i4=sizeof(D);
- printf("i1:%d\ni2:%d\ni3:%d\ni4:%d\n",i1,i2,i3,i4);//12 48 32 6
- }
0 0
- 详解结构体、类等内存字节对齐
- 详解结构体、类等内存字节对齐
- 详解结构体、类等内存字节对齐
- 详解结构体、类等内存字节对齐
- 详解结构体、类等内存字节对齐
- 详解结构体、类等内存字节对齐
- 详解结构体、类等内存字节对齐
- 详解结构体、类等内存字节对齐
- 详解结构体、类等内存字节对齐
- 详解结构体、类等内存字节对齐
- 结构体、类等内存字节对齐
- 结构体、类等内存字节对齐
- 解结构体、类等内存字节对齐
- 结构体和类的内存字节对齐详解
- 结构体字节对齐详解
- 结构体字节对齐详解
- 结构体字节对齐---内存字节对齐(转载)
- [C++基础]内存对齐(字节对齐,结构体对齐)
- 欢迎使用CSDN-markdown编辑器
- 用JDK自带方法 写入XML文档
- JS长整型精度问题
- C#:光标通过上下键或者enter键从一个textBox移动到另一个textBox或实现按键click功能
- vs2010中int main( int argc, char * argv[] )的参数设置
- 详解结构体、类等内存字节对齐
- swift学习笔记之setter和getter方法
- sdau三 1015
- mtk LCD 驱动过程详解
- appserv集成php,apache,mysql三种功能
- Effective c++条款1-2总结
- 分区概念及Linux系统盘文件名称
- Oracle 定时任务详解
- 使用 Velocity 模板引擎快速生成代码