gpt4 book ai didi

c++ - char* 与先前指令中设置的值的比较未优化?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:39 24 4
gpt4 key购买 nike

在摆弄一些测试代码时,我在以下代码中观察到:

extern char* pc;
int muysimple() {
*pc = 0;
if (*pc != 0) { return 1111; }

return 4444;
}

比较没有被我在godbolt上选择的任何编译器优化掉.

如果我将 extern char* 更改为 extern int*,比较被优化掉。

为什么 gcc 和 clang 都保留对 char 的比较,即使这段代码中似乎没有任何内容可以合法地更改值以使比较的计算结果为真?

语言规范中是否有任何内容禁止通过 char* 进行写入/读取优化(但允许优化 int*!) 还是优化器只是对 char 更加保守?


正如评论中已经提到的那样:我不明白 -- 明智的规则 -- 别名规则如何在这里发挥作用。此代码只有一个变量可见,没有多线程或对任何地方的调用。

当然,char 别名规则很可能是编译器不优化它的实际原因,但这里的问题是编译器是否允许为 char* 优化这个——就像他们为 int* 做的一样——或者他们是否实际上不允许优化这个。

最佳答案

even though there seems to be nothing in this code that could legally change the value so that the comparison ever evaluates to true?

pc = (char *) &pc; 是一个有效的赋值,因为 char 左值可用于访问任何 POD 类型,所以对 * 的赋值pc 可能会改变 pc

关于c++ - char* 与先前指令中设置的值的比较未优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622417/

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