172 похожих чатов

Почему std.container.Array выполняет вставку быстрее, чем обычный массив? Я что-то

делаю неправильно? Почему вообще компилятор при оптимизации не выкидывает оба этих массива?https://godbolt.org/z/TbY87v8K6

14 ответов

11 просмотров
Egor-Kulebyakin Автор вопроса

reserve у динамического массива, похоже, что вообще ничего не делает в данном примере.

Оптимизации походу

Egor-Kulebyakin Автор вопроса
Darkanronpa Dark Hole
Оптимизации походу

у std.container.Array больше каких-то ограничений или из-за чего там насколько больше возможностей для оптимизации (не смотреть на gdc, там просто рандом какой-то)

Egor Kulebyakin
reserve у динамического массива, похоже, что вооб...

У тебя неправильное количество памяти резервируется — в 100 раз меньше, это приводит к реаллокам, как вариант.

Ну возможно тут дело в том что llvm лучше работает с ручным выделением памяти, а gc ему меньше нравится. Вариант 2. Тут просто массив arr потом убирается gc, и malloc не обращается к ОС за памятью.

Без -O у меня как раз просто массив быстрее

Egor-Kulebyakin Автор вопроса
Darkanronpa Dark Hole
Без -O у меня как раз просто массив быстрее

вы же не предлагаете мне делать релизы из артефактов дебажной сборки? :))

Egor Kulebyakin
вы же не предлагаете мне делать релизы из артефакт...

Release сборка (с соответствующим флагом) ничего не меняет. Тут именно в оптимизациях дело — а вот как они влияют я не могу сказать.

Egor-Kulebyakin Автор вопроса
Darkanronpa Dark Hole
Release сборка (с соответствующим флагом) ничего н...

под релизом я имелл ввиду сборку с двумя флагами -O -release, а не конкретно -release

Ну не на порядок. в 2 - 4 рза быстрее.

Egor Kulebyakin
screenshot

Хорошо. Видимо зависит от машины, нагрузок и так далее. Но тут дело не в GC. Встроенные массивы плохо подходят для таких множественных добавлений элементов, они для этого не оптимизированы. Если использовать std.array.Appender, заточенный под это, то ситуация меняется: https://godbolt.org/z/Pz7jMKM4j

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
9
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Карта сайта