博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构体和共用体字节对齐
阅读量:5095 次
发布时间:2019-06-13

本文共 1066 字,大约阅读时间需要 3 分钟。

转载自

视频更详细:1. 

                     2. 

举例:8字节对齐

1 #pragma pack(push) //保存对齐状态 2 #pragma pack(8) 3 struct node 4 { 5     char ch;     // 1     Byte 6     short sh;    // 2     Bytes 7     int in;        // 4      Bytes 8     float f;      //4 9     double db // 810     char *p    //4 在32bits机器中所有指针4字节11    char arr[5];//数组和5个单独类型相等,相当列出5个char在根据原则对齐12 }13 #pragma pack(pop)//恢复对齐状态

结果为:占用8*5=40字节

补全原则:补全后是2 4 8的倍数即可

对齐原则:没有满要求对齐的格子要补齐,一个类型必须能整体取出,对齐满足基数

对齐基数:pack(n)和成员中类型占字节最大者(m),二者中取其小者为基数,即 MIN ( n , m);

举例:4字节对齐

1  #pragma pack(push) //保存对齐状态 2  #pragma pack(8) 3  struct node 4 { 5      char ch;     // 1     Byte 6      short sh;    // 2     Bytes 7      int in;        // 4      Bytes 8      float f;      //4 9      double db // 810      char *p    //4 在32bits机器中所有指针4字节11     char arr[5];//数组和5个单独类型相等,相当列出5个char在根据原则对齐12 }13 #pragma pack(pop)//恢复对齐状态

结果为:占用4*8=32字节

优缺点衡量:1.对齐满足 成员最大字节数(m)为基数的话可以增快内存的读取速度,程序效率高,但占空间大,以空间换时间。

                    2.对齐满足 MIN(n,m),即设置的手动对齐字节(n)可能比成员最大字节要小,则能省下空间,但内存读取效率降低,以时间换空间。

      3.实际工作中要看项目要求来取舍,鱼和熊掌不可兼得。

转载于:https://www.cnblogs.com/ycpkbql/p/9020711.html

你可能感兴趣的文章
vs 打开项目时要建配置文件的解决办法
查看>>
sublimie 知乎
查看>>
three.js 入门案例
查看>>
一些方便系统诊断的bash函数
查看>>
Floyd算法 - 最短路径
查看>>
【转载】基于vw等viewport视区相对单位的响应式排版和布局
查看>>
<转>关于MFC的多线程类 CSemaphore,CMutex,CCriticalSection,CEvent
查看>>
《你们都是魔鬼吗》实验十二 团队作业八:Alpha冲刺
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
[Leetcode]942. DI String Match
查看>>
css3之transform-origin
查看>>
1003 Emergency
查看>>
bm25
查看>>
Oracle 导入导出 创建用户等
查看>>
[转]JavaScript快速检测浏览器对CSS3特性的支持
查看>>
对接系统的一些思考
查看>>
exception from hresult:0x8000401A(excel文档导出)
查看>>
过年为什么要贴门神? 分类: 其他 2015-01-...
查看>>
android学习笔记--AlarmManager
查看>>
Robot Framework 源码解析(1) - java入口点
查看>>