首页 > 其他分享 >大小端对齐

大小端对齐

时间:2024-07-01 21:57:44浏览次数:10  
标签:存储 int 成员 char 地址 大小 对齐

小端对齐与大端对齐

1)小端对齐(Little-endian):将低序字节存储在低位地址(低位编址)
2)大端对齐(Big-endian):将高序字节存储在低位地址(高位编址)

比如一个数据 0x12345678,地址 0x8000 为起始地址,当使用小端对齐时,0x8000 存储数据 0x78,存储低位数据;当使用大端对齐时,0x8000 存储数据 0x12,存储高位数据

判断大小端

  1. 强制转换
BOOL IsBigEndian()    
{    
    int a = 0x1234;    
    char b =  *(char *)&a;  //通过将int强制类型转换成char单字节,通过判断起始存储位置。即等于 取b等于a的低地址部分    
    if( b == 0x12)    
    {    
        return TRUE;    
    }    
    return FALSE;    
}  
  1. 联合体
BOOL IsBigEndian()    
{    
    union NUM    
    {    
        int a;    
        char b;    
    }num;    
    num.a = 0x1234;    
    if( num.b == 0x12 )    
    {    
        return TRUE;    
    }    
    return FALSE;    
}  

内存对齐

内存对齐满足一下三条规则:

  1. 数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储

  2. 结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存

  3. 收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的整数倍

#pragma pack(1) 告诉编译器,所有的对齐都按照1的整数倍对齐

#pragma pack(push) //保存对齐状态   
#pragma pack(4)//设定为4字节对齐   
struct test   
{   
char m1;   
double m4;   
int m3;   
};   
#pragma pack(pop)//恢复对齐状态   

标签:存储,int,成员,char,地址,大小,对齐
From: https://www.cnblogs.com/augustine0654/p/18278931

相关文章

  • 随机生成50个0-100之间的数字,生成对应个数的随机字母,再按数字大小从小到大排序最后写
    importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;importjava.util.Random;importjava.io.FileNotFoundException;importjava.io.PrintStream;publicclassRandomNum{publicstaticvoidmain(String[]args)throwsFileNotF......
  • 【git】github如何上传超过100MB大小的单个文件
    在使用GitHub进行版本控制时,默认情况下,单个文件的大小限制为100MB。如果你需要上传超过这个大小的文件,可以使用GitLFS(LargeFileStorage)。GitLFS是一种Git扩展,专门用于处理大文件,它将大文件替换为轻量级的指针,并将实际的文件内容存储在远程服务器上。1.安装从Git2......
  • IBM-PC的字节对齐
    TheIBM-PC,shortforInternationalBusinessMachinesPersonalComputer,wasoneoftheearliestmass-producedpersonalcomputers.ItwasintroducedbyIBMin1981andquicklybecameastandardintheburgeoningpersonalcomputingindustry.TheIBM-PCwas......
  • 如何压缩PDF文件大小?两种好用方法
    PDF文件太大怎么压缩,压缩PDF文件大小方法有哪些呢?PDF文件作为常用的文档格式之一,兼容性比较好,文档中可包含表格、图片、文字等内容,所以PDF文件体积通常会比较大。下面就来介绍一下它的压缩方法!方法一:在线转换有很多在线转换工具都可实现PDF压缩,比如ilovepdf中文版就是一款特别好......
  • C++题解(1) 信息学奥赛一本通 1003:对齐输出 洛谷 B2004:对齐输出 土豆编程 T1003:对
    【题目描述】读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们,按照格式要求依次输出三个整数,之间以一个空格分开。【输入】只有一行,包含三个整数,整数之间以一个空格分开。【输出】只有一行,按照格式要求依次输出三个整数,之间以一个空格分开。【输入样例】......
  • 【教学类-36-09】20240622钓鱼(通义万相)-A4各种大小的鱼
    背景需求:用通义万相获得大量的简笔画鱼的图片,制作成不同大小,幼儿用吸铁石钓鱼的纸片(回形针),涂色、排序等补一张通义万相的鱼图素材准备(一)优质的鱼图片(二)剔除的鱼(两个眼睛、很多鱼鳍、不是鱼的造型)(三)模板模板4条(14.2*7.9)模板9条(9.5*5.23)模板10条(9.66*5.62)......
  • ggplot2绘制采样地,手动批量指定颜色、性状、大小、设置图例
     001、原始数据LongitudeLatitudediqusubspenum-10439West_EuropeBos_taurus10-356West_EuropeBos_taurus30-351West_EuropeBos_taurus202-44Central_South_EuropeBos_taurus26245Central_South_EuropeBos_tauru......
  • C++ 结构体对齐详解
    目录前言一、为什么要对结构体进行对齐操作?二、基本概念三、对齐规则四、示例讲解1.简单的变量对齐2.结构体包含有结构体的对齐结构体成员详细解析五、使用指令改变对齐方式__attribute__((packed))#pragmapack(push,n)#pragmapack(pop)六、总结前......
  • SQL Server数据库查看所有数据库的所有表的大小
    1.查看单个库所有表大小SELECT DatabaseName=db_name(), SchemaName=sch.name, TableName=tab.name, TotalRowCount=par.rows, TotalSpace=SUM(alc.total_pages)*8, UsedSpace=SUM(alc.used_pages)*8, UnusedSpace=(SUM(alc.total_pages)-SUM(alc.us......
  • 记录--单页面首屏优化,打包后大小减少64M,加载速度快了13.6秒
     ......