LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

Пример иллюстрирует эффективность передачи moveable типов по значению.

а вы не видите там, что компилятор в данном режиме делает копию извне, и это нужно для того, чтобы иногда использовать movable.

то есть код вызова ВСЕГДА вздувается минимум вдвое, ради того, чтоб ИНОГДА, не было вызова лишнего копирования.

вот вызов по конст.ссылке и по копии, функции где параметр - просто локальная переменная

конст ссылка

        leaq    -2800(%rbp), %rax
        leaq    -3200(%rbp), %rdx
        movq    %rdx, %rsi
        movq    %rax, %rdi
        call    pass_by_ref(string_like const&)

с копией

        leaq    -3200(%rbp), %rdx
        leaq    -2000(%rbp), %rax
        movq    %rdx, %rsi
        movq    %rax, %rdi
        call    string_like::string_like(string_like const&) [complete object constructor]
        leaq    -2400(%rbp), %rax
        leaq    -2000(%rbp), %rdx
        movq    %rdx, %rsi
        movq    %rax, %rdi
        call    pass_by_value(string_like)

из 5 команд вызова стало 10, это называется эффективностью? а размер кода уже не является одним из факторов эффективности?

Исходная версия alysnix, :

Пример иллюстрирует эффективность передачи moveable типов по значению.

а вы не видите там, что компилятор в данном режиме делает копию извне, и это нужно для того, чтобы иногда использовать movable.

то есть код вызова ВСЕГДА вздувается минимум вдвое, ради того, чтоб ИНОГДА, не было вызова лишнего копирования.

вот вызов по конст.ссылке и по копии, функции где параметр - просто локальная переменная

конст ссылка

     subq    $3200, %rsp
        leaq    -2800(%rbp), %rax
        leaq    -3200(%rbp), %rdx
        movq    %rdx, %rsi
        movq    %rax, %rdi
        call    pass_by_ref(string_like const&)

с копией

        leaq    -3200(%rbp), %rdx
        leaq    -2000(%rbp), %rax
        movq    %rdx, %rsi
        movq    %rax, %rdi
        call    string_like::string_like(string_like const&) [complete object constructor]
        leaq    -2400(%rbp), %rax
        leaq    -2000(%rbp), %rdx
        movq    %rdx, %rsi
        movq    %rax, %rdi
        call    pass_by_value(string_like)

из 5 команд вызова стало 10, это называется эффективностью? а размер кода уже не является одним из факторов эффективности?