Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
movq 8(%rdi), %rdx
movq (%rdi), %rax
xorl %esi, %esi
.L2:
cmpq %rdx, %rax
je .L6
addl (%rax), %esi
addq $4, %rax
jmp .L2
Стандартом не гарантируется, что for_each будет оптимизирована так же хорошо, как и цикл, а это важно, если вы пишете переносимый код.
Кстати, вам не кажется странным тот факт, что специализированная функция для подсчета суммы дает худший результат, чем цикл или использование for_each?
а гарантии по оптимизации циклов стандарт дает что ли?
accumulate не использует +=, вот в чем штука. Оператор поправлю, спасибо
их никто не дает
Стандартом не гарантируется, что for_each будет оптимизирована так же хорошо, как и цикл, а это важно, если вы пишете переносимый код.
g++ -std=c++11 main.cpp -o test -O3 && ./test
duration 33.995 ms mseconds
$ g++ -std=c++11 acc.cpp -o test -O3 && ./test
accumulate
t=291.32 ms
sum=-1471389927
Даже если бы я писал код вручную, у меня не получилось бы лучше.
даже сложение происходит сразу по двум элементам.
Веселые старты 2: for_each vs accumulate