c – 类的内存对齐

前端之家收集整理的这篇文章主要介绍了c – 类的内存对齐前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 Game Engine Architecture书的帮助,在内存管理器上工作.
目前我正在阅读关于内存对齐的内容(在书和网页中),我不确定如何正确地使用对齐类.我理解内存对齐的概念(例如,一个4字节的数据块应该位于以0x0,0x4,0x8或0xC结尾的地址)但是在本书的allocateAligned()函数中是一个注释,表明对齐有成为两个人的力量.如果我有一个有两个int和一个char的类,sizeof(classs)告诉我,该类大12字节.那么,你会通过32作为对齐吗?这不是浪费记忆而且可能导致碎片化吗?
我的问题是,如何正确地对齐类,你能解释一下它更详细(如果你想对齐更大的数据块会发生什么,比如121字节),并且更大的块被对齐是否有意义(因为如果我通知了,处理器在一次调用中只获取8个字节)?

解决方法

类型的对齐永远不会大于类型的大小.这是因为在数组中,元素之间不能有填充.

同样重要的是,类型的对齐可能小于类型的大小.

让我们考虑你的类类型:它有三个成员,两个4字节整数和一个2字节整数.假设4字节整数的对齐是4字节,2字节整数的对齐是2字节(这很常见).在这种情况下,类类型的对齐只有4个字节.它可以位于任何4字节边界上,并且每个成员都将正确对齐.

这就是为什么你的类类型有两个字节的填充:12可以被4整除,但10不是.如果你的类没有填充,它的大小只有10个字节,而在一个元素数组中,一半的对象会被错位.

猜你在找的C&C++相关文章