У меня есть код с большим количеством malloc
s и mallocs API для конкретного устройства (я программирую на GPU, поэтому cudaMalloc
).
По сути, мой конец моего кода - большой шведский стол вызовов распределения, в то время как мой заключительный раздел - вызовы освобождения.
Поскольку я инкапсулировал свои глобальные данные в структурах, освобождение довольно длинное, но, по крайней мере, я могу разбить их на отдельные функции. С другой стороны, я хотел бы более короткое решение. Кроме того, автоматический освобождение памяти уменьшит риск утечек памяти, если я забуду явно записать освобождение в функции глобального распределителя.
Мне было интересно, можно ли написать некую шаблонную оболочку класса, которая позволит мне «регистрировать» переменные во время процесса malloc
/ cudaMalloc
, а затем в конце симуляции выполнить массу освобождение от петель (отмена регистрации). Чтобы быть ясным, я не хочу печатать отдельные освобождения (free
/ cudaFree
s), потому что опять-таки это долго и нежелательно, и предполагается, что все, что я зарегистрирую, не будет освобождено, пока симуляция устройства завершен, и основной завершается.
Преимущество здесь состоит в том, что если я зарегистрирую новую переменную продолжительности симуляции, она автоматически освободится, поэтому я не рискую забыть ее освободить и создать утечку памяти.
Возможна ли такая обертка?
Вы бы предложили это сделать?
Если да, то как?
Заранее спасибо!