ZHCUAQ1F july 2015 – april 2023
在优化调用时,编译器假定,如果将局部变量的地址传递给函数,则该函数通过指针写入来更改局部变量。这使得局部变量的地址在返回后无法在其他地方使用。例如,被调用函数不能将局部变量的地址分配给全局变量,也不能返回局部变量的地址。
如果代码以这种方式使用别名并使用了优化,则必须使用 --aliased_variables 选项。例如,假设您的代码类似于以下代码,其中局部变量 x 的地址传递给函数 f(),该函数将 glob_ptr 别名设置为该地址并返回该地址。如果该示例要通过优化进行编译,则需要 --aliased_variables 选项,以便函数 f() 能够成功执行其操作。
int *glob_ptr;
g()
{
int x = 1;
int *p = f(&x);
*p = 5; /* p aliases x */
*glob_ptr = 10; /* glob_ptr aliases x */
h(x);
}
int *f(int *arg)
{
glob_ptr = arg;
return arg;
}