Size: a a a

2020 February 18

λO

λeonid Onokhov in rust_offtopic
как в плюсах прямо
источник

а

а это кто in rust_offtopic
λeonid Onokhov
я думал в русте считается что утечка памяти это сейф
так и есть да
источник

OA

Oleg Andreev in rust_offtopic
Bogdan
ну мы же теряем гарантию что осовбодим память
не было такой гарантии
источник

OA

Oleg Andreev in rust_offtopic
кстати, любопытно реализован rc::Weak. Пока у тебя где-то болтаются weak refs у тебя память не освобождается
источник

OA

Oleg Andreev in rust_offtopic
даже если все strong refs уже пропали и у объекта вызвался Drop
источник

B

Bogdan in rust_offtopic
Oleg Andreev
кстати, любопытно реализован rc::Weak. Пока у тебя где-то болтаются weak refs у тебя память не освобождается
нет же
источник

B

Bogdan in rust_offtopic
они нгаинают указывать вникуда
источник

r

red75prime in rust_offtopic
Oleg Andreev
кстати, любопытно реализован rc::Weak. Пока у тебя где-то болтаются weak refs у тебя память не освобождается
Если там, скажем, String, то память, выделенная String освободится.
источник

OA

Oleg Andreev in rust_offtopic
red75prime
Если там, скажем, String, то память, выделенная String освободится.
это второго порядка индирект, поэтому да
источник

B

Bogdan in rust_offtopic
Oleg Andreev
кстати, любопытно реализован rc::Weak. Пока у тебя где-то болтаются weak refs у тебя память не освобождается
https://doc.rust-lang.org/std/rc/struct.Weak.html#method.upgrade

Returns None if the inner value has since been dropped.
источник

OA

Oleg Andreev in rust_offtopic
потому что Rc -> String -> chars
источник

B

Bogdan in rust_offtopic
Oleg Andreev
это второго порядка индирект, поэтому да
ааа, ты про внутренние структуры, которые для буккипинга используются
источник

OA

Oleg Andreev in rust_offtopic
а если у тебя Rc::new(структура на 1Кб), то этот 1Кб будет висеть пока все weak refs тоже не уйдут
источник

OA

Oleg Andreev in rust_offtopic
>Note however that a Weak reference does prevent the allocation itself (the backing store) from being deallocated.
источник

OA

Oleg Andreev in rust_offtopic
источник

OA

Oleg Andreev in rust_offtopic
и размер этих данных - не только буккипинг rc::, а еще и твоя структура которую ты там держишь. Если это Vec/String - то она маленькая и содержит указатель еще куда-то
источник

B

Bogdan in rust_offtopic
понял👌
источник

r

red75prime in rust_offtopic
Rc::Weak где-то таки должен weak count хранить.  В принципе, можно разделить аллокации для strong count + ptr_to_weak_count + data и weak_count + ptr_to_strong_count_or_null
источник

OA

Oleg Andreev in rust_offtopic
короче safe Rust ничего не гарантирует про то, где и когда память освобождается. Все на уровне best effort и даже если утечка, то это не ломает остальные гарантии
источник

OA

Oleg Andreev in rust_offtopic
а кого волнует OOM - тому нужны кастомные аллокаторы и no_std
источник