详解结构体、类等内存字节对齐
来源:互联网 发布:unity3d导入fbx动画 编辑:程序博客网 时间:2024/06/15 11:20
- 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++基础]内存对齐(字节对齐,结构体对齐)
- Tez示例(WordCount)
- setObject:ForKey:与setValue:ForKey:的区别与联系
- JS实现页面超时后自动跳转到登陆页面
- 滚动屏幕加载信息
- java-错误 java.lang.NoClassDefFoundError: org/apache/log4j/Level
- 详解结构体、类等内存字节对齐
- hdu4464
- Frame和bounds,clipsToBounds和masksToBounds
- 一个比喻
- Linux进程间通信之消息队列(一)
- 动态加载当前屏幕的网页图片(网页拖动时图片加载显示)
- CPCI
- git@ubuntu-start!
- 如何才能让自己更有魅力