相关疑难解决方法(0)

究竟什么是C++中的"副作用"?

它是一个定义明确的标准术语,还是开发人员用来解释一个概念(......和概念是什么)的术语?据我所知,这与所有令人困惑的序列点有关,但我不确定.

我在这里找到了一个定义,但是这不会使每个代码语句产生副作用吗?

副作用是运算符,表达式,语句或函数的结果,即使在完成对运算符,表达式,语句或函数的求值之后,它仍然存在.

有人可以解释一下"副作用"一词在C++中的正式含义,它的意义是什么?

作为参考,有些问题涉及副作用:

  1. 逗号操作员是否没有副作用?
  2. 强制编译器不优化无副作用的语句
  3. 将对象传递给C++函数时的副作用

c++ c++11

31
推荐指数
4
解决办法
1万
查看次数

如何正确地对[模板化] C++程序进行基准测试

<backgound>

我真的需要优化C++代码.我正在为分子模拟编写一个库,我需要添加一个新功能.我过去曾尝试添加此功能,但之后我使用了嵌套循环中调用的虚函数.我对此感到不满,第一次实施证明这是一个坏主意.然而,这对于测试概念是可以的.

</ background>

现在我需要这个功能尽可能快(没有汇编代码或GPU计算,这仍然必须是C++,更可读而不是更少).现在我对模板和类策略有了更多了解(来自Alexandrescu的优秀书籍),我认为编译时代码生成可能是解决方案.

但是,在完成将其实现到库中的巨大工作之前,我需要测试设计.问题是测试这个新功能的效率的最佳方法.

显然我需要改进优化,因为没有这个g ++(以及可能还有其他编译器)会在目标代码中保留一些不必要的操作.我还需要大量使用基准测试中的新功能,因为1e-3秒的增量可以区分好的和坏的设计(在真实程序中这个功能将被称为百万倍).

问题是g ++在优化时有时"太聪明",如果考虑到从未使用计算结果,可以删除整个循环.我在查看输出汇编代码时已经看过了.

如果我向stdout添加一些打印,那么编译器将被强制在循环中进行计算,但我可能主要是对iostream实现进行基准测试.

那么如何对从库中提取的小特征进行正确的基准测试呢?相关问题:在小型装置上进行这种体外试验是正确的方法还是我需要整个背景?

谢谢你的建议!


似乎有几种策略,从特定于编译器的选项,允许微调到更通用的解决方案,应该适用于每个编译器,如volatileextern.

我想我会尝试所有这些.非常感谢您的所有答案!

c++ optimization benchmarking

7
推荐指数
1
解决办法
2902
查看次数

标签 统计

c++ ×2

benchmarking ×1

c++11 ×1

optimization ×1