字节对齐计算
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字节处对齐,因此我们需要用到上面的计算。
更多精彩
赞助商链接