Одним из основных преимуществ таких лямбд является то, что они могут быть почти тривиально встроенными в окружающий код.Вот почему они нам нравятся!Нет никаких дополнительных затрат на новый стек, скачок или что-то в этом роде.
Конечно, с встраиванием приходит использование стека окружающей функции для хранения всех данных.Это то, что вы наблюдали.
Делайте то, что вы делаете в любой другой ситуации «я не хотел, чтобы это было встроено».В данном конкретном случае, возможно, используйте реальные функции, а не лямбда-выражения, и присвойте им атрибут типа «noinline» (см. Документацию вашего набора инструментов).
Если вы хотите получить пример того, почему люди этого не делаютчасто используйте C ++ для встроенного программирования, это было бы хорошо.Он рассчитан на более мясистые процессоры, и нам вообще все равно, будем ли мы использовать еще 8 байтов стека. Мы заботимся о том, быстро ли работают наши программы, и доверяем компилятору, который поможет нам сделать это, указав, где это имеет смысл.сделать это.Ваша среда и требования не вполне не соответствуют этому социальному контракту.
Конечно, переработка или перегрузка dostuff
, так что вы можете назвать это так:
dostuff(48, 24);
…будет лучше?
Реализация может быть такой простой, как:
__attribute__((noinline))
void doStuff(const uint32_t var1, const uint32_t var2)
{
const structTest sT = {var1, var2};
doStuff(sT);
}
Это также намного меньше кода и, IMO, легче читать.
КстатиХотя он работает на вашей платформе, я не рекомендую использовать $
в качестве идентификатора.Это нестандартно до степени и не очень понятно читателю.