指针混叠 - 2022.1 简体中文

Versal ACAP AI 引擎编程环境 用户指南 (UG1076)

Document ID
UG1076
Release Date
2022-05-25
Version
2022.1 简体中文

指针混叠表示可使用不同指针名称访问相同存储器位置的情况。在 C/C++ 中,严格混叠规则表示如果指针指向截然不同的类型,则假定这些指针不混叠。混叠会对程序执行顺序施加强约束。以下显示了 pq 的混叠。

图 1. 指针混叠

以下指针混叠示例中,指针 pq 指向相同地址。中间列显示的是由编译器生成的汇编语言代码,右侧显示的是运算和时钟周期。

图 2. 混叠代码示例

通过在此代码示例中添加 restrict 关键字,编译器即可最优化生成的汇编语言,以增加硬件中的运算并行度。以下示例显示了如何使用 restrict 关键字来防止混叠使用更少的时钟周期来完成同样的运算。

图 3. 使用 restrict 关键字来避免混叠

存储器依赖关系

代码中的存储器依赖关系可能限制编译器尝试执行的最优化种类。例如,在以下代码中,xyz 与指针 pq 可能无关。但在函数代码中,指针 p 和指针 q 指向同一个全局变量 xyz。编译器必须保证在上述情况下都能正确执行。鉴于这些不同种类的存储器依赖关系,编译器需采取保守操作并限制最优化。

图 4. 不相关的指针