Size: a a a

Rust — русскоговорящее сообществo

2020 April 05

ИЛ

Иван Лещенко in Rust — русскоговорящее сообществo
Александр
Стало интересно разобраться в работе с памятью
loop{
let mut xs=Vec::new() ;
for i in 0..1000000000000000000_u64{
xs.push(i);
}
drop(xs);
}
А раст даёт гарантии того, что при аллокации памяти она вообще будет доступна?
источник

AK

Alexander Krivitskiy in Rust — русскоговорящее сообществo
Александр
Спустя пару секунд работы паникует capacity overflow
Ещё бы, capacity растет экспоненциально
источник

ИЛ

Иван Лещенко in Rust — русскоговорящее сообществo
Иван Лещенко
А раст даёт гарантии того, что при аллокации памяти она вообще будет доступна?
В плане, он пытается добавить 1000000000000000000 значений по 8 байт в вектор
источник

А

Александр in Rust — русскоговорящее сообществo
Alexander Krivitskiy
Ещё бы, capacity растет экспоненциально
Я о том, что вектор дропается после добавления всех элементов
источник

А

Александр in Rust — русскоговорящее сообществo
Должен дропаться
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Да. Но до этого дело не доходит
источник

AK

Alexander Krivitskiy in Rust — русскоговорящее сообществo
Mikail Bagishov
Да. Но до этого дело не доходит
+
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Еще во время исполнения цикла размер вектора превышает isize::max(), и он паникует
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
А может даже абортит процесс, я точно не помню
источник

А

Александр in Rust — русскоговорящее сообществo
Ты хочешь сказать, что емкость вектора начинает превышать максимально доступный пул адресов?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
На нее есть два ограничения.
1) Если вектор попытался увеличить свое хранилище, и аллокатор вернул nullptr, т.е. не смог выделить кусок памяти нужного размера, происходит abort.
2) Если capacity превысила лимит, происходит паника.
источник

А

Александр in Rust — русскоговорящее сообществo
Тут второй вариант
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Да
источник

AK

Alexander Krivitskiy in Rust — русскоговорящее сообществo
Александр
Ты хочешь сказать, что емкость вектора начинает превышать максимально доступный пул адресов?
Max capacity = 2^31 (на x32)
Ты пытаешься всунуть 10^18
Для этого нужен capacity 2^60
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
источник

А

Александр in Rust — русскоговорящее сообществo
Max capacity 2^32?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Видимо, это та самая функция
источник

А

Александр in Rust — русскоговорящее сообществo
Mikail Bagishov
Видимо, это та самая функция
В точку
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Александр
Max capacity 2^32?
источник

0

0158882 in Rust — русскоговорящее сообществo
рус тилни урганаман
источник