结构体内字节手动对齐(#pragam pack) - 范文中心

结构体内字节手动对齐(#pragam pack)

04/11

在程序运行过程中,结构体或类的字节对齐可以使程序更方便、更快速的执行,除了编译器本身的优化外,还可以在程序中手动对齐。在C/C++中,是通过引入#pragam pack(n)来实现的。

缺省情况下,编译器为每个结构体或类中的每个成员按其自然对界(natural alignment,自然对界是指按结构体或类的成员中size最大的成员对齐)条件分配空间。各个成员安装它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构或类的地址相同。

#pragma pack(n)的使用规则为:结构体或类中的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照n和自然对齐长度中比较小的那个进行。即,当n的值等于或超过所有数据成员的长度时,这个n值将不会产生任何效果。详见实例解释其用法:

(1)  #pragma pack(4)

struct test {

int a;      //第一个成员,放在[0,3]偏移的位置

char b;   //第二个成员,自身长为1,和pack比较,取最小值,也就是1,所以这个按一个字节对齐,放在[4]偏移的位置

short c;  //第三个成员,自身长为2,和pack比较,取最小值,也就是2,所以这个按两个字节最求,放在[6,7]偏移的位置

char d;   //第四个成员,自身长为1,和pack比较,取最小值,也就是1,所以这个按一个字节对齐,放在[8]偏移的位置

};

int nSize=sizeof(test);

这个结构体实际占据内存9个字节,结构体或类之间的对齐,是按照类或结构体内部最大成员的长度和n值中较小的一个对齐的,这个例子中,结构体之间对齐的长度是min(n,sizeof(int)),也就是4,9按照4的整数倍为12,所以nSize=12.

(2) #pragma pack(4)

struct test {

char b;   //第一个成员,自身长为1,和pack比较,取最小值,也就是1,所以这个按一个字节对齐,放在[0]偏移的位置

short c;  //第二个成员,自身长为2,和pack比较,取最小值,也就是2,所以这个按两个字节最求,放在[2,3]偏移的位置

char d;   //第三个成员,自身长为1,和pack比较,取最小值,也就是1,所以这个按一个字节对齐,放在[4]偏移的位置

};

int nSize=sizeof(test);

这个结构体实际占据内存5个字节,结构体之间对齐的长度是min(n,sizeof(short)),也就是2,5按照2的整数倍为6,所以nSize=6.


相关内容

  • golang: 利用unsafe操作未导出变量
    发表于16天前(2014-01-17 05:03)   阅读(388) | 评论(4) 5人收藏此文章,我要收藏 赞5 摘要 unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁.uintp ...
  • 遥控窗帘电路的设计-毕业设计
    遥控窗帘电路的设计 学生:XX 指导教师:XX 内容摘要:本文主要介绍了遥控窗帘的电路设计.电机工作的时候是否有鸣响提示,以及光控状态下环境亮度的控制参数的调整等等都可以通过遥控器随着电子技术和自动化技术的发展,人们对生活质量的要求越来越高 ...
  • 杭州会计电算化考试题
    一.单选题 1.第一台电子计算机诞生于年,2.要采用晶体管元件,第三代计算机主要采用中小规模成电路元件,第四代电子计算机主要采用大规模集成电路. 3.我国第一代电子计算机于年制造成功. 4.电子计算机内所有信息都是以数形式表示. 5.电子计 ...
  • 信息技术-初中理论知识点
    第一单元 信息与信息技术 1. 信息及其特征 "信息"一词通常是指数据.消息所包含的内容和意义.语言.文字.符号.信号.指令.代码等都可以表达和传递信息. 信息的特征:普遍性.存储性.传递性.共享性.失真性.时效性.加工 ...
  • 电脑基本英语单词总结
    电脑基本英语单词 CPU(Center Processor Unit)中央处理单元 mainboard 主板 RAM(random access memory) 随机存储器(内存) ROM(Read Only Memory)只读存储器 Fl ...
  • 大连大学大学本科毕业论文格式模版
    大连大学本科毕业论文 大连大学本科学位论文格式规范(草案) 作 者 姓 名: 学科.专业 : 学 号 : 指 导 教 师: 完 成 日 期: 大连大学 Dalian University 大连大学本科毕业论文格式规范 大连大学学士学位论文 ...
  • 静止励磁说明书-山东 济南
    DAVR-S1/S2静止可控硅微机励磁调节器 使用维护说明书 山 东 济 南 发 电 设 备 厂 目 录 第一章 概述-----------------------.2 第二章 设计标准------------------------.3 ...
  • 知网论文检测查重报告样板20**年
    打印 文本复制检测报告单(全文标明引文) №:ADBD2015R_[***********]0527152407xxxxx 检测时2015-05-27 15:24:07 间: 检测文献: 红外防盗报警系统 作者: XX(xxxxxxxx) ...
  • 智能捕鼠器
    摘 要 当今社会,人们的生活水平和生活方式都在不断的提高,智能化已经在我们 生活中得到了实施.随着科学技术的进步和人们生活条件的友好改善,各种智能设备在人们的生活中不断出现,使人们的生活越来越方便和舒适.其中以单片机为核心实现的智能捕鼠器因 ...
  • 实验二求最大数最小数
    实验二.寻找最大和最小数实验 一. 1. 2. 3. 4. 实验目的 学习循环程序结构,掌握编写循环处理程序的方法和技巧. 通过循环结构程序熟悉汇编语言程序设计的主要方法. 了解和掌握程序设计过程中算法的选择. 掌握汇编语言调试方法. 二. ...