我的同事喜欢使用 gcc 和“-g -O0”来构建生产二进制文件,因为如果发生核心转储,调试很容易。他说,没有必要使用编译器优化或调整代码,因为他发现生产过程中的 CPU 负载并不高,例如 30% 左右。
我问他原因,他告诉我:如果CPU负载不高,瓶颈一定不是我们的代码性能,而应该是一些IO(磁盘/网络)。因此,使用 gcc -O2 对于改善延迟和吞吐量是没有用的。这也表明我们在代码中没有太多需要改进的地方,因为 CPU 不是瓶颈。那是对的吗?
我被要求在面试中提供以下代码的输出.
int a[] = {1,2,3,4,5};
int *p = &a + 1;
printf("%d, %d", *(a+1), *(p - 1));
Run Code Online (Sandbox Code Playgroud)
我说我无法确定第二个结果,所以我没能通过采访.
当我回到家中并尝试编译代码时,g ++会报告错误,但gcc只会发出警告.打印结果为"2,5".
任何人都知道为什么C和C++编译器在这方面表现不同?