BSc*_*ker 3 c++ benchmarking profiling gprof
我正在寻找一个简单的操作/例程,如果连续重复,可以"浪费"时间.
我正在研究如何将gprof配置文件应用程序,因此这个"浪费时间"需要在用户空间中浪费时间,并且不需要外部库.IE,调用sleep(20)将"浪费"20秒的时间,但gprof不会记录这次,因为它发生在另一个库中.
对于可以重复浪费时间的简单任务的任何建议?
在不产生CPU的情况下"浪费"时间的最简单方法是一个紧凑的循环.
如果您不需要限制浪费的持续时间(例如,您通过在完成后简单地终止该过程来控制它),那么转到C样式*:
for (;;) {}
Run Code Online (Sandbox Code Playgroud)
(但请注意,该标准允许实现假设程序最终会终止,所以从技术上讲这个循环 - 至少在C++ 0x中 - 具有未定义的行为并且可以进行优化!**
否则,您可以手动计时:
time_t s = time(0);
while (time(0) - s < 20) {}
Run Code Online (Sandbox Code Playgroud)
或者,不是重复发出time系统调用(这将导致在内核中花费一些时间),如果在GNU兼容系统上,您可以使用signal.h "警报"来结束循环:
alarm(20);
while (true) {}
Run Code Online (Sandbox Code Playgroud)
"Handler Returns"的文档页面上甚至有一个非常相似的例子.
(当然,这些方法都会让你在一段时间内将100%的CPU送到你手中,让蓬松的独角兽从你的耳朵里掉出来.)
*为清晰起见,{}而不是;刻意使用.最终,没有理由在这样的上下文中编写分号; 这是一个可怕的习惯,当你在"真正的"代码中使用它时,它会成为一个维护陷阱.
**见[n3290: 1.10/2]和[n3290: 1.10/24].
| 归档时间: |
|
| 查看次数: |
1723 次 |
| 最近记录: |