Как связать аппаратную часть памяти с программой на C++?
Если у меня есть специальный аппаратный блок с некоторым хранилищем, он подключен к компьютеру и сопоставлен с памятью, так что его хранилище доступно в диапазоне адресов 0x55500000 - 0x555fffff, как я соединяю этот аппаратный блок с моей программой C++, чтобы динамическая память находится в этом аппаратном блоке, а не в памяти моего компьютера? Мне нужно реализовать класс, который имеет следующую функцию в нем.
void * allocMemoryInMyHardware(int numberOfBytesToAllocate);
который возвращает указатель на выделенный кусок памяти, или ноль, если не удается выделить.
2 ответа
Вам нужно написать свой собственный распределитель. Найдите в Интернете пример кода и настройте его. Если у вас есть простые требования, базовый распределитель может быть написан с нуля за 2-4 часа. Этот подход будет работать, если ваша платформа не имеет управления виртуальной памятью и код может напрямую обращаться к вашему диапазону адресов. В противном случае вам нужно погрузиться в разработку драйверов на вашей платформе.
Типичная стратегия состоит в том, чтобы добавить заголовок к каждой выделенной единице и организовать двойной связанный список для свободных областей памяти. Кучи NT работают аналогичным образом.
Я думаю, вы можете использовать новый синтаксис размещения для этой цели. Используя это, вы можете указать, где должны быть построены объекты:
char memory[10];
int* i = new (memory) int(42);