C ++ 11 Реализация Lambda и модель памятиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ 11 Реализация Lambda и модель памяти

Сообщение 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>

Это правильно? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/122 ... mory-model
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»