Я разрабатываю проект, в котором есть функция Receive, которая проверяет HW, чтобы узнать, есть ли что-либо, полученное от HDLC. Период опроса составляет 1 мс. И если что-то доступно, мое программное обеспечение отправляет подтверждение по HDLC, чтобы подтвердить, что сообщение получено.Избегайте использования памяти стека
Максимальное количество байтов, разрешенных в моем протоколе, составляет 1000 байт. Считаете ли вы, что наличие локально объявленного буфера приема с этим размером является хорошей идеей? Или я должен объявить его в моем файле cpp со статическим ключевым словом, учитывая, что переменная изменена только в функции приема, но нигде больше?
Вы используете встроенную систему? Если нет, тогда нет необходимости беспокоиться о пространстве стека. И даже если вы находитесь на встроенной системе, это действительно зависит от системы. –
Да, это встроенная система с FreeRTOS. Фактически, моя задача состояла в том, чтобы сохранить тактовые циклы процессора, чтобы ему не приходилось выделять 1000 байт за каждые 1 мс. что вы думаете ? – tguclu
Когда компилятор «выделяет» память в стеке, это не то же самое, что выделение в куче, нет функции, которая вызывается или нажимается на стек. Вместо этого компилятор просто генерирует код, который перемещает одно значение в регистр указателя стека. Неважно, сколько локальных переменных у вас или их размер, это все равно будет одной записью в один регистр. Важным является размер вашего стека, и если вы можете позволить себе хранить такой массив в стеке (и за исключением самых маленьких систем, вы можете легко хранить 1000 байт в стеке). –