未定义的行为 - 2022.1 简体中文

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

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

使用 restrict 关键字可改善性能,如上一个主题所述。但如果关键字使用不当,则会出现问题。__restrict 子指针必须在不同于父指针的块级作用域内使用,例如,指针 pq,如以下示例所示。

有效示例 1

图 1. restrict 关键字的使用

在相同作用域内使用父指针可能中断 __restrict 约定,并生成未定义的行为,如以下示例中的指针 pq 所示。

图 2. 未定义的行为

有效示例 2

这也可能在 load 操作期间发生,如下图中的绿色文本所示 (return *p;)。

图 3. 加载操作

当在相同作用域内使用 restrict 指针时,会发生未定义的行为,如以下示例中的指针 pq 所示。

图 4. 相同作用域内的 restrict 指针

内联函数的有效示例

以下代码显示了有效的内联函数调用,其中,指针 p 与指针 q 在不同作用域内使用。

图 5. 内联函数调用

当在相同作用域内使用 restrict 指针时,会发生未定义的行为,如以下示例中的指针 pq 所示。

图 6. 相同作用域内的内联函数调用