Я разработчик встроенного программного обеспечения и поэтому не всегда могу использовать все приятные функции C ++.Одна из самых сложных вещей - избегать динамического выделения памяти, так как это несколько универсально для всех контейнеров STL.
std::vector
очень полезен при работе с переменными наборами данных.Проблема, однако, в том, что распределение (например, std::reserve
) не выполняется при инициализации или фиксировано.Это означает, что фрагментация памяти может происходить при копировании.
Было бы замечательно, чтобы каждый вектор имел выделенную область памяти, которая является максимальным размером, до которого вектор может расти.Это создаст детерминистическое поведение и позволит отобразить использование памяти микроконтроллером во время компиляции.Вызов push_back
, когда вектор имеет максимальный размер, может создать std::bad_alloc
.
Я прочитал, что можно написать альтернативную версию std::allocator
для создания нового поведения выделения.Возможно ли создать такое поведение с помощью std::allocator
или альтернативное решение будет более подходящим?
Я действительно хотел бы продолжать использовать библиотеки STL и вносить в них поправки вместо воссоздания собственного вектора.так как я более склонен совершать ошибки, чем их реализация.
sidenote # 1:
Я не могу использовать std::array
как 1: это не такпредоставленный моим компилятором и 2: он имеет статическое распределение, но мне все равно придется управлять границей между моими данными и буфером внутри std::array
.Это означает переписать std::vector
с моими свойствами размещения, от которых я пытаюсь избавиться.