python结构体字节对齐_八字节对齐

字节对齐意义

在进行c/c++开发时,特别是要求跨平台或者网络通信的时候,都会要求进行字节对齐,那为什么需要对齐,如果不对齐会有什么问题呢。

(1) 存储方式:

现代计算机处理器对存储的读取都是按照特定大小字节去读写(称其为一个存储单元),比如一个变量char,它的长度为1,但是在存储器中它占用的空间是一个存储单元。

当变量字节长度小于等于一个存储单元时,都将分配一个存储单元,且存储空间永远是存储单元的整数倍。

(2)读写效率:

CPU访问内存都是一次访问一个存储单元,比如32位linux系统一个存储单元为4字节,当需要读取一个int数据时,只需要读取一次,如果存储单元为1字节,则需要读取4次,

通过移位等运算计算出一个int值,同样的读取一个int值,其访问内存及运算的次数远远低于一次读取一个字节。

(3)跨平台问题:

各个硬件平台对存储空间的处理不尽相同,比如一些CPU访问特定的变量必须从特定的地址进行读取,嵌入式ARM架构和我们平时使用的x86架构以及不同的操作系统

比如32位操作系统和64位操作系统对存储的管理和存储单元的读写都不尽相同,如果我们的代码需要在不同的平台上运行该怎么办,我们不能每种架构和每种系统都开

发一套程序吧。此时我们需要定义一种通用的字节对齐方式,不管什么架构与系统都能能数据进行完整正确的读写。

(4)网络通信问题:

在进行网络通信的时候,如果是相同的平台间进行,则无需关心字节问题,但是跨平台的通信,由于不同架构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值