Деструктор для объекта cl::Buffer
, возвращаемый cl::CreateBuffer()
, освободит буфер, что также освободит всю память, выделенную на устройстве. Это основной механизм, на который вы должны полагаться.
Смерть процесса по любой причине (cra sh, чистый выход) даже при выделенных ресурсах также разрушит дескриптор контекста процесса в драйвере устройства, что приведет к драйвер для выполнения очистки.
Конечно, ошибки на любом уровне стека могут помешать этому во всех случаях корректно происходить, но в целом, когда ваш процесс умирает, все должно быть сброшено.