В настоящее время я работаю над созданием встроенной системы с использованием процессора ARM Cortex M3 с 64 КБ SRAM. В данный момент я ищу способ обеспечить детерминированную производительность с контейнерами STL, который включает в себя гарантию того, что я не смогу закончить нехватку памяти во время выполнения.
Меня в первую очередь интересует, как контейнеры STL выполняют динамическое распределение памяти. Хотя я могу использовать собственный распределитель, чтобы эти структуры получали память из пула, который я выделил, мне нужно было бы настроить отдельный пул для каждой структуры, чтобы один экземпляр структуры не мог занимать пространство другого экземпляра.
Я работаю с другими людьми в этом проекте, которые не хотят заниматься необработанным распределением памяти и предпочли бы иметь возможность использовать «хорошо известные» структуры данных (стек, очередь, очередь и т. Д.). Поэтому в настоящее время я рассматриваю возможность создания оболочек вокруг C-массивов для обеспечения этих структур. Это позволило бы статическое выделение памяти, необходимой для поддержки этих контейнеров, и позволило бы другим разработчикам знать размер контейнера, который они создали до запуска, на основе информации о размере кода, предоставленной компилятором. На мой взгляд, это гарантирует, что проблемы с нехваткой памяти не могут возникнуть во время выполнения, и значительно упрощает проектирование системы.
Другой вариант связан с выделением контейнеров STL при инициализации системы. После периода инициализации дополнительное динамическое выделение памяти не может произойти. Однако, насколько мне известно, стандартные структуры данных C ++ STL этого не поддерживают - для этого необходимо, чтобы такие контейнеры, как стек, могли быть предварительно выделены (аналогично вектору).
Буду признателен за любые комментарии относительно моего предложения по созданию классов вокруг стандартных C-массивов? Кроме того, существует ли более простой способ выделить контейнер STL статического размера, например стек или очередь статического размера, во время компиляции? (Я знаю, что это возможно с вектором, но другие я не уверен)
Примечание: я прочитал другой вопрос ( Embedded C ++ для использования STL или нет ), но автор этого вопроса не уточнил, сколько у них памяти (кроме того, как они были используя процесс ARM7) или, кажется, рассматривает решение, подобное моему.
Второе примечание: я знаю, что для некоторых разработчиков 64 КБ SRAM могут выглядеть как много памяти. На самом деле, я разработал процессоры AVR со значительно меньшим объемом памяти, поэтому я понимаю эту точку зрения. Однако, с моей текущей (возможно, неинформированной) точки зрения, 64 КБ памяти не так много, если говорить о контейнерах STL.