gpt4 book ai didi

c - gcc const 和跨函数调用的优化

转载 作者:行者123 更新时间:2023-12-01 12:29:48 29 4
gpt4 key购买 nike

考虑这段代码,使用 gcc-Ofast 编译:

int f1(const char *p) {
if (!p[0])
return 0;

f2(); //not inlined

if (p[0]) { //not optimized out
//do something
return 0;
} else {
//do something else
//not optimized out
return 1;
}
}

我如何获得第二个测试和较低分支被优化的行为(因为 p[0]const 并且已经过测试)?

最佳答案

编译器没有理由假定函数 f2 可能不会修改 p 指向的内容。 p 被定义为 const char *p 的事实只是告诉编译器 p 不能用于修改它指向的数据,而不是数据本身是不变的。

如果你知道数组确实没有被函数f2()修改,你可以修改代码使其不再读取它,看看gcc是否会相应优化:

int f1(const char *p) {
char c = *p;
if (!c)
return 0;

f2(); //not inlined

if (c) { //should be always true
//do something
return 0;
} else {
//should be optimized out
//do something else
return 1;
}
}

关于c - gcc const 和跨函数调用的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35385723/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com