Я бы хотел, чтобы некоторая информация о том, как правильно подумать о закрытии C ++ 11 и std :: function < /code> с точки зрения того, как они реализованы и как обрабатывается память. Я также делаю достаточное количество программ в реальном времени, например, На микроконтроллерах и для аудиосистем, где следует избегать неэнергинистических распределений памяти /рассылки. Поэтому я бы хотел разработать лучшее понимание того, когда использовать или не использовать C ++ Lambdas. Однако, когда среда захватывается либо значением, либо посредством ссылки, в стеке создается анонимный объект. Когда поставка значения должна быть возвращена из функции, один охватывает его в std :: function . Что происходит с замыкающей памятью в этом случае? Он скопирован из стека в кучу? Освободится ли он всякий раз, когда Function function , то есть, скрепляется ли эта ссылка, как std :: shared_ptr ? В этом случае закрытия A и B будут выделены один раз. Хотя я не уверен, будут ли они выделены на стеке или кучи. Однако в целом это кажется безопасным в системе в реальном времени. С другой стороны, если B строит некоторую функцию Lambda C, которую он возвращает, то память для C будет выделена и повторной сделки, что было бы не приемлемо для использования в реальном времени. Я хочу выполнить обработку блока A, а затем B, где вызывает свой аргумент. Обе эти функции возвращают объекты std :: function , поэтому f будет объектом function , где его среда хранится в куче:
auto f = A(B); // A returns a function which calls B
// Memory for the function returned by A is on the heap?
// Note that A and B may maintain a state
// via mutable value-closure!
for (t=0; t
и тот, который, я думаю, может быть плохо использовать в коде в реальном времени: < /p>
for (t=0; t
и один, где я думаю, память стека, вероятно, используется для закрытия: < /p>
freq = 220;
A = 2;
for (t=0; t
В последнем случае закрытие строится на каждой итерации цикла, но в отличие от предыдущего примера оно дешевое, потому что оно похоже на вызов функции, не производится распределения кучи. Более того, мне интересно, может ли компилятор «поднять» закрытие и сделать оптимизацию внедрения. < /P>
Это правильно? Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/122 ... mory-model
C ++ 11 Реализация Lambda и модель памяти ⇐ C++
Программы на C++. Форум разработчиков
1748785971
Anonymous
Я бы хотел, чтобы некоторая информация о том, как правильно подумать о закрытии C ++ 11 и std :: function < /code> с точки зрения того, как они реализованы и как обрабатывается память. Я также делаю достаточное количество программ в реальном времени, например, На микроконтроллерах и для аудиосистем, где следует избегать неэнергинистических распределений памяти /рассылки. Поэтому я бы хотел разработать лучшее понимание того, когда использовать или не использовать C ++ Lambdas. Однако, когда среда захватывается либо значением, либо посредством ссылки, в стеке создается анонимный объект. Когда поставка значения должна быть возвращена из функции, один охватывает его в std :: function . Что происходит с замыкающей памятью в этом случае? Он скопирован из стека в кучу? Освободится ли он всякий раз, когда Function function , то есть, скрепляется ли эта ссылка, как std :: shared_ptr ? В этом случае закрытия A и B будут выделены один раз. Хотя я не уверен, будут ли они выделены на стеке или кучи. Однако в целом это кажется безопасным в системе в реальном времени. С другой стороны, если B строит некоторую функцию Lambda C, которую он возвращает, то память для C будет выделена и повторной сделки, что было бы не приемлемо для использования в реальном времени. Я хочу выполнить обработку блока A, а затем B, где вызывает свой аргумент. Обе эти функции возвращают объекты std :: function , поэтому f будет объектом function , где его среда хранится в куче:
auto f = A(B); // A returns a function which calls B
// Memory for the function returned by A is on the heap?
// Note that A and B may maintain a state
// via mutable value-closure!
for (t=0; t
и тот, который, я думаю, может быть плохо использовать в коде в реальном времени: < /p>
for (t=0; t
и один, где я думаю, память стека, вероятно, используется для закрытия: < /p>
freq = 220;
A = 2;
for (t=0; t
В последнем случае закрытие строится на каждой итерации цикла, но в отличие от предыдущего примера оно дешевое, потому что оно похоже на вызов функции, не производится распределения кучи. Более того, мне интересно, может ли компилятор «поднять» закрытие и сделать оптимизацию внедрения. < /P>
Это правильно? Спасибо.
Подробнее здесь: [url]https://stackoverflow.com/questions/12202656/c11-lambda-implementation-and-memory-model[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия