WEB开发网
开发学院软件开发C++ 字节对齐计算 阅读

字节对齐计算

 2010-12-14 08:00:47 来源:WEB开发网   
核心提示:在某些程序实现中,我们有时候需要用到字节对齐计算,字节对齐计算,上网搜下“字节对齐”,大部分的内容是如何计算struct的大小和使用#pragma pack来改变strcut的成员数据存储方式,可以看《风魂》引擎之内存池学习2.BMP文件要求保存在内存中时,每一行的数据要在4字节处对齐,我也找到

在某些程序实现中,我们有时候需要用到字节对齐计算,上网搜下“字节对齐”,大部分的内容是如何计算struct的大小和使用#pragma pack来改变strcut的成员数据存储方式,我也找到并且转载了一篇资料供查阅:内存对齐详解

在这里想表达的意思是想将某个size向上取整到某个数值align的倍数,那么不管align为任何值,都可以这样求的:
newsize = (size + align - 1) / align * aligned;
而当align为2的幂,比如4、8、16等,可以更简单:newsize = (size + align - 1) / & ~ (aligned-1)

一些作用:

1.比如在内存池中,一般会将内存块划分为不同大小,比如8,16,32(为啥都是8或者说4的倍数,因为x86平台是按4字节的寻址的,这样子速度最快,具体的可以看上面转载的文章)。当我们需要6字节或者7字节大小的内存块都,都会取整到8,然后找到对应的内存块,因此需要上面的计算。
我也简单写了一个内存池的笔记,可以看《风魂》引擎之内存池学习
2.BMP文件要求保存在内存中时,每一行的数据要在4字节处对齐,因此我们需要用到上面的计算。

 

Tags:字节 对齐 计算

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接