相关疑难解决方法(0)

使用-g进行编译本身会降低性能吗?

(这是关于gcc和clang的问题,但可能适用于其他编译器.)

如果我编译我的C或C++代码,并使用生成调试信息-g开关,这是否本身降解以任何方式编译的程序的性能...(1)用最小优化(-O0)?(2.)最大化优化(-O3)?

注意:我并不是说必须解析/加载可执行文件的性能损失,由于额外的内容,这可能会更大; 我指的是运行的代码.

c c++ gcc clang debug-information

15
推荐指数
1
解决办法
1639
查看次数

为什么我的代码在编译用于分析(-pg)时使用多个线程比使用单个线程运行得慢?

我正在写一个光线追踪器.

最近,我添加了线程到程序,以利用我的i5四核上的额外内核.

在一个奇怪的事件发生时,应用程序的调试版本现在运行得更慢,但优化的构建运行速度比我添加线程之前更快.

我将"-g -pg"标志传递给gcc用于调试构建,并将"-O3"标志传递给优化构建.

主机系统:Ubuntu Linux 10.4 AMD64.

我知道调试符号会给程序带来很大的开销,但始终保持相对性能.即,更快的算法将始终在调试和优化构建中运行得更快.

知道为什么我看到这种行为吗?

调试版本使用"-g3 -pg"编译.带"-O3"的优化版本.

Optimized no threading:        0m4.864s
Optimized threading:           0m2.075s

Debug no threading:            0m30.351s
Debug threading:               0m39.860s
Debug threading after "strip": 0m39.767s

Debug no threading (no-pg):    0m10.428s
Debug threading (no-pg):       0m4.045s
Run Code Online (Sandbox Code Playgroud)

这使我确信"-g3"不应该归咎于奇怪的性能增量,但它更像是"-pg"开关."-pg"选项可能会添加某种锁定机制来测量线程性能.

因为无论如何"-pg"在线程应用程序上被破坏了,我只是删除它.

linux performance multithreading gcc gprof

2
推荐指数
1
解决办法
3483
查看次数

调试符号会影响 Rust 的性能吗?

我正在运行使用调试符号编译的 Rust 实用程序。

cargo build 
# without the "--release" flag   
Run Code Online (Sandbox Code Playgroud)

与用 C 编写的相同实用程序相比,这些确实很慢。

调试符号是否可能影响性能?

performance debug-symbols rust

-1
推荐指数
1
解决办法
1878
查看次数