РЕДАКТИРОВАТЬ: более простое объяснение дается в комментариях.Но мой ответ применим, как только ;
был удален .
Агрессивный оптимизирующий компилятор, такой как Clang ( Compiler Explorer link ), может видеть, что единственныйВажной частью вашей функции create_array_in_heap
является вызов sleep
.Остальное не имеет функционального значения, так как вы заполняете блок памяти только для того, чтобы в конечном итоге его отбросить, и он удаляется компилятором.Это вся ваша программа, скомпилированная Clang 7.0.0 с -O2
:
main: # @main
pushq %rax
movl $10, %edi
callq sleep
xorl %eax, %eax
popq %rcx
retq
Для того, чтобы сравнить любой аспект программы, программа должна быть разработана для вывода результата (вычисление иотбрасывание результата слишком просто для компилятора).Результат также следует вычислять из входных данных, которые не известны во время компиляции, в противном случае вычисление всегда дает один и тот же результат и может быть оптимизировано путем постоянного распространения.