博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++字节对齐
阅读量:5365 次
发布时间:2019-06-15

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

/* * 字节对齐:默认情况下,某个元素长度为n,它占用的开始地址就要从n的倍数开始 (地址从0x00开始) * 需要注意的是:最后总长度需要是最长元素的整数倍,比如t3,最后一个int在0x24到0x27,但由于最长的double是8字节,所以0x28到0x31也被用于对齐 * char:   1 * short:  2 * int:    4 * double: 8 * * 指定对齐长度时,按对齐长度对齐即可,如 #pragma pack(2) ,所有元素从0,2,4,6,8,10...开始即可 */struct t1 { // length: 16    char a;    short b;    int c;    double d;};struct t2 { // 24    char a;    short b;    char e;    int c;    // 以上占12字节,0x00 ~ 0x11    double d;  // double 8字节,从8的倍数开始,即从16开始,0x12 ~ 0x15不用};struct t3 { // 32    char a;     // 0x00 ~ 0x01    short b;    // 0x02 ~ 0x03    int c;      // 0x04 ~ 0x07    double d;   // 0x08 ~ 0x15    char e[5];  // 0x16 ~ 0x23    int x;      // 0x 24 ~ 0x27,但长度要为最长元素d的整数倍,所以额外添加0x28~0x31用于对齐    // int x2;  // 再加一个int,将占用0x28~0x31,长度32不变};

转载于:https://www.cnblogs.com/dylanchu/p/11567884.html

你可能感兴趣的文章
Java 编程下实现随机无重复数字功能
查看>>
Android 编程下的代码混淆
查看>>
animation属性
查看>>
页内的模块和组件抽象规划经验
查看>>
安全-分析深圳电信的新型HTTP劫持方式
查看>>
将Centos的yum源更换为国内的阿里云源
查看>>
git diff 的用法
查看>>
一段sql的优化
查看>>
十进制与十六进制的相互转换
查看>>
在Flex中用Validator检测数字、字符串、Email.
查看>>
[leetcode]4Sum
查看>>
POJ1062 昂贵的聘礼
查看>>
【零基础学习iOS开发】【02-C语言】08-基本运算
查看>>
Java 将指定字符串连接到此字符串的结尾 concat()
查看>>
Hibernate Criterion
查看>>
Python知识
查看>>
我们为什么要搞长沙.NET技术社区(三)
查看>>
杭电acm Cake
查看>>
js函数中this的指向
查看>>
c++ 引用方式传递数组
查看>>