При написании кода на С++ для встроенной системы с ограниченными ресурсами ЦП и памяти общее правило заключается в создании объектов в стеке и избегании использования кучи, если это действительно необходимо. Конечно, это имеет много известных преимуществ, но с появлением STL и рекомендаций, рекомендующих std::vectors как эффективную структуру данных, нарушает ли это правило, о котором я упоминал, поскольку вектор будет использовать кучу?
Пример. В старые времена можно было объявить статические массивы с известными размерами, которые будут удовлетворять использованию. В настоящее время можно просто использовать векторы.
Мне не очень нравится этот переход, так как всегда существует вероятность того, что вектор не сможет выделить нужную память (напоминание: это для встроенных систем с ограниченной памятью). Использование массивов с известными размерами в стеке гарантирует, что во время компиляции будет свободное место.
Вызов метода резервирования(), но это делается во время выполнения.
Итак, это причина для беспокойства, или я просто параноик? Определенно гораздо проще использовать эти векторы, но для встроенной среды это может быть не очень хорошая идея?
Примечание.. Это не касается динамических и фиксированных массивов, а больше о том, как данные распределяются в памяти, что очень важно для моей среды. Например, некоторые люди сделают это так: скажем, что массив может вырасти или сжать от 1 до 10 элементов. Некоторые люди создавали бы массив, который покрывает этот размер в стеке, а NULL заканчивается в зависимости от текущего размера. Таким образом, избегается фрагментация, и мы гарантируем выделение во время компиляции. Однако переход на вектор сделал его намного более чистым, но за счет использования кучи и, возможно, имел дело с исключениями, если распределение не выполняется. Это то, о чем я беспокоюсь.