加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 类的内存对齐

发布时间:2020-12-16 03:40:13 所属栏目:百科 来源:网络整理
导读:我正在使用 Game Engine Architecture书的帮助,在内存管理器上工作. 目前我正在阅读关于内存对齐的内容(在书和网页中),我不确定如何正确地使用对齐类.我理解内存对齐的概念(例如,一个4字节的数据块应该位于以0x0,0x4,0x8或0xC结尾的地址)但是在本书的allocat
我正在使用 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个字节,而在一个元素数组中,一半的对象会被错位.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读