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

О/ такой вопрос, если я в цикле создаю очень похожие

лямбды, компилятор может это как-то понять и оптимизировать? (может общий тип им присвоить)

std::vector<std::function<void(void)>> A;
for(auto item : items)
A.push_back([item](){});

22 ответов

11 просмотров

В данном случае нет, ты же используешь std::function

anton- Автор вопроса

У лямбд будет один и тот же тип, но разное содержимое (значение захваченных переменных). Тело лямбды сгенерируется один раз. Но оверхед на std::function никуда не денется

anton- Автор вопроса
Alexander Karaev
У лямбд будет один и тот же тип, но разное содержи...

о, это здорово, тогда я могу использовать тип этой лямбды в качестве параметра шаблона, и не бояться что там образуется куча инстансов? (я подумал уйти от std:function через динамический полиморфизм, вот так будет работать быстрее, интересно? https://pastebin.com/KhawCSxj )

anton
о, это здорово, тогда я могу использовать тип этой...

std::function будет быстрее, т.к. под капотом там примерно тоже самое, но реализации обычно содержат SBO SOO, чтобы избегать динамических аллокаций.

anton
о, это здорово, тогда я могу использовать тип этой...

зачем? у тебя лямбда имеет захват. это удобно. в гцц есть оптимизация малого буфера в std::function. и захват двух указателей не будет вызывать диспетчер памяти и этим пользуются даже в эмбедете где маллока нет вообще

anton
о, это здорово, тогда я могу использовать тип этой...

std::function так же и реализован, только лучше

anton- Автор вопроса
Alexander Karaev
std::function будет быстрее, т.к. под капотом там ...

о, это ещё приятнее, если std::function работает быстрее, чем это, тогда на мой неприхотливый взгляд её (его) более чем достаточно

anton
о, это здорово, тогда я могу использовать тип этой...

Ты изобрел type erasure, наверное, сам того не подозревая

Alexander N
SBO?

Опечатка. SOO, конечно - small object optimization

anton
нет, подозревая

Ну вот функтион так и реализован Переизобретать даже не надо!

Alexander N
Поди ещё EBO имеет место быть

Ну это уже делали реализации

anton- Автор вопроса
Alexander Karaev
Опечатка. SOO, конечно - small object optimization

то есть если у меня там очень маленькие лямбды и маленький список захвата, я даже могу надеяться что вектор будет лежать одним куском, без ссылок куда либо из его элементов?

anton
то есть если у меня там очень маленькие лямбды и м...

Без динамической памяти под каждый элемент, да

anton
то есть если у меня там очень маленькие лямбды и м...

Очень маленький - воспринимать буквально. На GCC8/9 - 16 байт, на MSVC - аж 40, Стандарт обещает от 8

anton- Автор вопроса

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта