字节对齐意义
在进行c/c++开发时,特别是要求跨平台或者网络通信的时候,都会要求进行字节对齐,那为什么需要对齐,如果不对齐会有什么问题呢。
(1) 存储方式:
现代计算机处理器对存储的读取都是按照特定大小字节去读写(称其为一个存储单元),比如一个变量char,它的长度为1,但是在存储器中它占用的空间是一个存储单元。
当变量字节长度小于等于一个存储单元时,都将分配一个存储单元,且存储空间永远是存储单元的整数倍。
(2)读写效率:
CPU访问内存都是一次访问一个存储单元,比如32位linux系统一个存储单元为4字节,当需要读取一个int数据时,只需要读取一次,如果存储单元为1字节,则需要读取4次,
通过移位等运算计算出一个int值,同样的读取一个int值,其访问内存及运算的次数远远低于一次读取一个字节。
(3)跨平台问题:
各个硬件平台对存储空间的处理不尽相同,比如一些CPU访问特定的变量必须从特定的地址进行读取,嵌入式ARM架构和我们平时使用的x86架构以及不同的操作系统
比如32位操作系统和64位操作系统对存储的管理和存储单元的读写都不尽相同,如果我们的代码需要在不同的平台上运行该怎么办,我们不能每种架构和每种系统都开
发一套程序吧。此时我们需要定义一种通用的字节对齐方式,不管什么架构与系统都能能数据进行完整正确的读写。
(4)网络通信问题:
在进行网络通信的时候,如果是相同的平台间进行,则无需关心字节问题,但是跨平台的通信,由于不同架构