我有这样开始了像是否可以微优化“x = max(a,b); y = min(a,b);??
int sumLargest2 (int * arr, size_t n)
{
int largest(max(arr[0], arr[1])), secondLargest(min(arr[0],arr[1]));
// ...
的算法,我意识到,第一可能不是最优的,因为调用max
,然后min
是重复的,当你考虑到要知道最低要求的信息已经有一次你已经找到了最大值。所以我想通了,我可以做
int largest = max(arr[0], arr[1]);
int secondLargest = arr[0] == largest ? arr[1] : arr[0];
剃掉的min
无用的调用,但我不知道,实际上节省了多个操作。是否有任何花哨位移算法,可以做的
int largest(max(arr[0], arr[1])), secondLargest(min(arr[0],arr[1]));
相当于?????
你的基准测试显示这些“无用的调用min”是多少瓶颈? – Borgleader
首先,为什么现在需要优化? –
由于你的编译器无论如何都会内联它,这是非常值得怀疑的。你有没有任何分析结果显示它有所作为?您不会通过猜测哪些操作正在发生并进一步猜测每个操作需要多长时间来优化事情。你只需要测量它(不要忘记编译优化!)。看看生成的程序集,看看你是否有所作为。 – GManNickG