Size: a a a

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

2020 August 19

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Выделение памяти на куче это системный вызов как минимум
Ну вот это например точно не так.
источник

T1

Tony 123 in Rust — русскоговорящее сообществo
Mikail Bagishov
Ну вот это например точно не так.
часто это так лол
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Mikail Bagishov
Ну вот это например точно не так.
я бы сказал что это зависит от начальных условий
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
В этом вообще весь поинт аллокаторов же, чтобы не делать по mmap-у на каждую аллокацию.
источник

T1

Tony 123 in Rust — русскоговорящее сообществo
просто брейк двигает и всё
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Tony 123
часто это так лол
очень редко это так в произвольный момент времени
источник

T1

Tony 123 in Rust — русскоговорящее сообществo
Boris Vinogradov
при больших объектах у тебя будет уже не чанки а выделение регионов что может оказаться быстрее чем у стекового т.к. для стека ты не знаешь на сколько тебе надо страниц выделить памяти за раз
и такое есть
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Mikail Bagishov
Ну вот это например точно не так.
Как ты выделишь память на куче без единого сисколла?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Как ты выделишь память на куче без единого сисколла?
Сисколлы будут, но не на каждую аллокацию.
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Как ты выделишь память на куче без единого сисколла?
а кто тебе сказал что у тебя пустая куча?
источник

T1

Tony 123 in Rust — русскоговорящее сообществo
Boris Vinogradov
очень редко это так в произвольный момент времени
+/-, если объекты не такие большие (а часто обычные классы) то может и брейком
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Tony 123
+/-, если объекты не такие большие (а часто обычные классы) то может и брейком
стеку тоже нужны сисколы чтобы расти и они дороже чем кучевые
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Например, нетрудно написать аллокатор, в котором N выделений одинакового размера, потребуют не более чем log2(N)+1 сисколлов. (А именно все такие выделения хранить в обычном Vec). Для долгоживущего приложения logN / N это примерно 0.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Например, если у нас такой аллокатор, и мы сделали 100000 аллокаций, то имеем 1 сисколл на 5000 аллокаций в среднем, этим можно и пренебречь.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Mikail Bagishov
Например, нетрудно написать аллокатор, в котором N выделений одинакового размера, потребуют не более чем log2(N)+1 сисколлов. (А именно все такие выделения хранить в обычном Vec). Для долгоживущего приложения logN / N это примерно 0.
Тогда выделение будет выполнять какой-то код аллокатора
Всё ещё больше, чем одна инструкция
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Тогда выделение будет выполнять какой-то код аллокатора
Всё ещё больше, чем одна инструкция
аллокатор на стеке будет кушать тоже больше чем одна в реальном мире
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Boris Vinogradov
аллокатор на стеке будет кушать тоже больше чем одна в реальном мире
dec размер, %rsp
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
потому что стек сейчас рандомизируется и проверяется гардианами
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
%rsp теперь указывает на новый объект
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
dec размер, %rsp
это в детском примере на каком нибудь древнем компиляторе
источник