172 похожих чатов

Это он типо реально там как-то его оптимизирует что он

это считает за наносекунды?

17 ответов

23 просмотра

да: https://godbolt.org/z/PsWdnchzx

https://godbolt.org/z/9drvjf3d6 сверху - оптимизации выключены (как при debug билде) снизу - максимальные оптимизации 3-го уровня может так понятнее станет

насколько я помню это называется констант фолдинг https://llvm.org/doxygen/ConstantFolding_8cpp_source.html компилятор видит что набор инструкций выполняется над константами (да ещё и без всяких промежуточных ио и тд) то есть pure function следовательно это всё можно свернуть в одно константное значение что вы и наблюдаете когда весь вызов схлопыается в 1 асм операцию по установки регистра в нужное значение

вспоминаю мем компилятора фортрана который такие циклы оптимизировал в формулы суммы ряда

Traveller Kolsky
Ллвм тоже оптимизирует бтв

ну про ллвм байки не сочиняют

Kanashimia ꑭ support libre software
нет

не похоже что он в цикле складывает

Victor
screenshot не похоже что он в цикле складывает

ну что-то он наоптимизировал, но не то как нужно

Kanashimia ꑭ support libre software
нет

pub fn main() { let n: u32 = 1000; let now = std::time::Instant::now(); let res: u32 = sum(n); let t = now.elapsed(); dbg!(res); dbg!(t); } #[inline(never)] pub fn sum(n : u32) -> u32 { return (0..n).sum(); } sum схлопнулось до формулы example::sum: test edi, edi je .LBB1_1 lea eax, [rdi - 1] lea ecx, [rdi - 2] imul rcx, rax shr rcx lea eax, [rdi + rcx] add eax, -1 ret

Alex
pub fn main() { let n: u32 = 1000; let now...

вообще там ещё смешно что на плейграунде, стабильном / найтли, годболте везде разный асм выходит

Alex
pub fn main() { let n: u32 = 1000; let now...

почему он параметры со стека забирает что за аби такой странный

Max Силинг
почему он параметры со стека забирает что за аби т...

Где? Через lea просто арифметические операции идут.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта