Memory leaks 如果我没有';t调用clRelease*,是否会导致内存泄漏?

Memory leaks 如果我没有';t调用clRelease*,是否会导致内存泄漏?,memory-leaks,opencl,chromium,Memory Leaks,Opencl,Chromium,我想给Chromium添加一些OpenCL支持,所以我使用了像clCreateCommandQueue()这样的API,但我在Chromium中找不到合适的位置来进行清理 因此,如果我不调用像clReleaseCommandQueue()这样的API,操作系统会在进程终止后回收内存吗?或者我需要在流程的退出点调用它 PS,commandqueue在进程的整个生命周期中都是必需的,所以我只想确保它不会在进程终止后导致内存泄漏 谢谢您的帮助。因为所有OpenCL对象最终都由设备驱动程序持有,所以您不

我想给Chromium添加一些OpenCL支持,所以我使用了像
clCreateCommandQueue()
这样的API,但我在Chromium中找不到合适的位置来进行清理

因此,如果我不调用像
clReleaseCommandQueue()
这样的API,操作系统会在进程终止后回收内存吗?或者我需要在流程的退出点调用它

PS,commandqueue在进程的整个生命周期中都是必需的,所以我只想确保它不会在进程终止后导致内存泄漏


谢谢您的帮助。

因为所有OpenCL对象最终都由设备驱动程序持有,所以您不能期望在应用程序终止后自动释放它们。这是你的工作。

< P>如果你使用OpenCL C++包装器(C.HPP),编译器会找出清理对象的地方(当引用对象超出范围)。这不是一个用于AT出口(3)的工作,但是如果OpenCL对象被分配在进程的内存块中,当进程退出时,他们怎么还能留在那里?因为设备驱动程序控制它们?是什么让你认为每个OpenCL对象的全部都驻留在分配给你的程序的内存空间中?我在OpenCL标准中看不到任何保证。事实上,1.2规范的第18页谈到了引用计数:“在引用计数达到零后,对象的资源由OpenCL释放”。我认为这表明OpenCL实现拥有一部分对象内存,只有在进行适当的clRelease*调用时才会释放它;如果进程在没有关闭它们的情况下终止,它们仍然不会泄漏。OpenCL对象不一定是不同的,但当然可能是不同的。我猜清理工作依赖于类的析构函数。但我认为铬可能会阻止析构函数在快速关闭时运行。