为什么这行代码会泄漏内存?

时间:2011-08-07 13:54:23

标签: c# .net debugging memory-leaks

我发现在我的项目中泄漏内存的一行代码。这是一个DllImport方法:

[DllImport("OpenCL")] public static extern Error clEnqueueNDRangeKernel(OpenCLCommandQueue command_queue, OpenCLKernel kernel, Int32 work_dim, [In] IntPtr[] global_work_offset, [In] IntPtr[] global_work_size, [In] IntPtr[] local_work_size, Int32 num_events_in_wait_list, [In] OpenCLEvent[] event_wait_list, out OpenCLEvent e);

使用此代码调用:

OpenCLEvent e;

OpenCLDriver.clEnqueueNDRangeKernel(CommandQueue.OpenCLCommandQueue, OpenCLKernel, globalWorkSize.Length, globalWorkOffset, globalWorkSize, localWorkSize, eventWaitList.Count, eventWaitList.OpenCLEventArray, out e);

return null;

诸如CommandQueue.OpenCLCommandQueue和其他参数之类的东西是普通的属性或变量,它们不能泄漏内存,它们背后没有代码。

我不明白clEnqueueNDRangeKernel如何调用泄漏内存?我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

自2009年以来,OpenCL中存在内存泄漏问题,clEnqueueNDRangeKernel已知,2010年已修复......

http://www.opentk.com/node/1541?page=3
http://forums.amd.com/devforum/messageview.cfm?catid=390&threadid=122161&highlight_key=y

答案 1 :(得分:0)

您可以添加

clFinish(CommandQueue);

之后

clEnqueueNDRangeKernel