ZHCU881D May 2020 – May 2024
为了实现自动矢量化,循环的迭代计数器和迭代限制应该是有符号类型。也就是说,使用 int
而非 unsigned int
。
C 语言标准定义了无符号算术溢出的行为,但没有定义有符号算术溢出的行为。
在无符号的情况下,溢出值将“环绕”。因此,编译器必须假定(在某些情况下)循环计数器可能会循环,所以无法对循环的行为做出某些必要的结论。
在有符号类型的情况下,编译器可以假定迭代计数器不会溢出,因为根据 C 语言标准,它具有未定义的行为。因此,编译器可以对循环的行为做出某些结论,并由此可以对循环进行矢量化。