У меня есть рабочий процесс с несколькими задачами, выполняющими вычисления, которые связаны через ребра данных; так что одна задача создает данные для другой задачи. Каждая задача связана с отдельным потоком. Одна из этих задач - получение памяти из пула памяти, который перерабатывается другой задачей, которая освобождает эту память.Как получить доступ к метаданным о памяти в C++
MemoryData
используется в пуле памяти для хранения информации, например, при создании памяти (адресное пространство GPU/адресное пространство процессора) и правила выпуска (указывает, когда память может быть переработана).
Задача 1 получение памяти из пула:
std::shared_ptr<MemoryData<Type>> m = memGet<Type>("MemoryManagerName", ruleForReleasingMemory);
// Store the memory to passed along with data
data->setMemory(m);
m
должны быть переданы от задачи к задаче в данных до тех пор, пока не достигнет задачи, которая освобождает его.
Задача 2 освобождения памяти:
std::shared_ptr<MemoryData<Type>> m = data->getMemory();
memRelease("MemoryManagerName", m);
То, что я пытаюсь сделать, это изменить тип возврата memGet
просто вернуть Type
. Затем во время выпуска он может использовать какой-либо метод, чтобы получить MemoryData
для утилизации памяти. Это позволит мне упростить представление Data
, поэтому мне не нужно хранить std::shared_ptr<MemoryData<Type>>
.
До сих пор я рассматривал две конструкции:
(1) с использованием арифметики указателей использовать указатель на указатель **
и вычислить начальный адрес MemoryData
оттуда.
(2) Создайте сопоставление между указателем на Type и указателем на MemoryData, это потребует отправки этой информации в каждую задачу, и если мне нужно добавить динамическое распределение памяти, тогда это будет немного сложнее
Почему бирка C? C отличается от C++. выберите один –
Я открыт для предложений от C или C++. Я нашел выполнение арифметики указателя внутри структуры проще, чем класс. – Jameshobbs
Это не может быть язык C, потому что C не имеет 'std :: shared_ptr' или шаблонов. Я рекомендую удалить тег языка C. –