执行字节对齐检查
前提条件
- 已成功安装鲲鹏DevKit,并已安装对应工具。
操作步骤
- 登录鲲鹏DevKit工具,选择“亲和分析 > 字节对齐检查”。如图1所示。
- 单击“开始检查”,检查完成后会自动跳转至报告页面,单击需要修改文件的“查看建议源码”, 进入源码修改建议界面,“wtdbg2-2.5/dbgcns.h”文件修改建议如图2所示。
表1 页面说明 参数
说明
文件列表
分析的源码文件名称。
原始源代码
原始源代码。
结构变量内存空间分配
显示代码中需要对齐的32位和64位字节内存空间。
- 根据报告中展示的结构变量内存空间分配结果,对源代码进行字节对齐修改。
现代计算机中内存空间都是按照byte进行划分的,在理论上来讲似乎对任何类型的变量进行访问时都可以从任意内存地址开始。然而实际情况是访问特定类型的变量时经常会在特定内存地址进行访问,这就需要各种类型数据按照一定规则在空间上进行排练,而不是依照顺序进行排列,这就是字节对齐。
开发者可以根据字节对齐检查结果,在本地对需要自行对齐的源码文件进行字节对齐修改,以优化代码表达。
- 首先根据字节对齐检查结果,定位具体问题点,如下图所示。
图3 字节对齐检查结果
- 根据字节对齐检查结果,在本地对“wtdbg2-2.5/dbgcns.h”文件进行字节对齐修改。
字节对齐方式可以参考如下内容:
- 数据成员的起始位置必须是其自身大小的整数倍,即1字节、2字节、4字节等。
- 如果结构体中存在成员变量长度不是2的幂次方,则需要考虑这个成员变量以及后面的成员变量对齐方式。例如,如果某个成员变量长度为3字节,则它需要与后面的成员变量对齐到4字节边界上。
- 结构体的总大小必须是最大成员变量的整数倍。
调整变量hz和kmask的位置,如下图所示。
图4 源码字节对齐
- 经过字节对齐处理后,再进行一次字节对齐检查,检查结果如下图所示,检查结果中显示调整后的DBG结构体64位下已不存在内存空洞。
图5 字节对齐后检查结果
- 首先根据字节对齐检查结果,定位具体问题点,如下图所示。
父主题: 实践1:wtdbg源码字节对齐检查