
Dear Mathias, On 19 Jul 2009, at 22:15, Mathias Gaunard wrote:
Edward Grace wrote:
I modified the example to force side-effects by making the variables in the loop global. Consequently it now doesn't get optimised away - compilers sure are clever these days.
Rather, I think you should use volatile or something, which is guaranteed by the C++ standard not be optimized out.
Obtaining a reliable 'fire and forget' solution to this problem is quite important. I have played a little with boost::bind - through the way it forwards the arguments I think the side-effect problem is avoided. With reference to the timer code: ejg-timer-0.0.4.zip available here: http://tinyurl.com/lro5ok The attached code is timing a pair of trivial functions that simply multiply or divide two numbers and compare to see which is fastest. Clearly this will be data dependent. On my platform (Intel - Mac) as expected multiplication is generally faster than division. $ ./example_binding Enter a number: 4 Enter another: 8 When evaluating 4*0.125 vs. 4/8 There is no practial difference between division and multiplication The difference is : 0 $ ./example_binding Enter a number: 5 Enter another: 7 When evaluating 5*0.142857 vs. 5/7 Multiplication is quicker than division by around: 112.795% The difference is : 1.11022e-16 Any comments? -ed