The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Выпуск языка программирования Rust 1.54"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "Выпуск языка программирования Rust 1.54" +/
Сообщение от Ordu (ok), 31-Июл-21, 15:31 
> Чтобы такие растоманы не гоняли память туда сюда без толку

Оно не гоняет память туда-сюда без толку.

Глянь:

mod tmp {
    pub fn make_array() -> [i64; 128] {
    [-1; 128]
    }
}
fn main() {
    println!("{:?}", tmp::make_array());
}


(make_array засунута в сабмодуль, чтоб rustc её не инлайнил)

Другие твои комменты подсказывают мне, что ты хочешь доказать, что это крайне неэффективно, ибо копировать памяти много надо, и если так, то ты глобально ошибаешься. Забудь всё, что тебе рассказывал препод информатики в школе в 90-х. Это всё ложь. Уже лет 15-20 как это стало ложью.

Если это скомпилировать код выше с --emit=asm, то можно видеть такую штуку:

;; это main, прошу обратить внимание, mangled нехило, но тем не менее main
_ZN3tmp4main17hef74ed440589210dE:
    .cfi_startproc
    subq    $1112, %rsp     ; выделяется память на стеке под возвращаемое значение
    .cfi_def_cfa_offset 1120
    leaq    88(%rsp), %rdi  ; указатель на неё пошёл в %rdi, неявный аргумент для tmp::make_array
    callq    _ZN3tmp3tmp10make_array17h69c0c6c82460a46fE ; вызов make_array
        ...

Если ты заставишь C возвращать из функции объект килобайтового размера по значению, он сделает тебе примерно то же самое: память под возвращаемое значение будет выделять на стеке вызывающий код.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Выпуск языка программирования Rust 1.54, opennews, 29-Июл-21, 22:11  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру