CvMat* traindata=cvCreateMat(1000,36,CV_32FC1);
当我尝试着发布使用cvReleaseMat(&trainData)
内存分配错误的OpenCV cvReleaseMat
我发现在任务管理器的内存没有减少这个矩阵...,而不是本次发布命令没有对这种记忆任何影响在任务管理器中应用。
我的疑问是...... cvReleaseMat
是否释放CPU中的内存?或者它是否仅仅使矩阵在未来不可见?
CvMat* traindata=cvCreateMat(1000,36,CV_32FC1);
当我尝试着发布使用cvReleaseMat(&trainData)
内存分配错误的OpenCV cvReleaseMat
我发现在任务管理器的内存没有减少这个矩阵...,而不是本次发布命令没有对这种记忆任何影响在任务管理器中应用。
我的疑问是...... cvReleaseMat
是否释放CPU中的内存?或者它是否仅仅使矩阵在未来不可见?
是的cvReleaseMat
确实释放了内存。任务管理器并不是真正的查看CvMat *分配内存的工具。虽然如果你想使矩阵大得多,你可能会注意到它。该矩阵占用1000 * 36 * 4 = 144000字节。
你可以看到它回到下面的代码由Valgrind的分析输出:
CvMat* traindata = cvCreateMat(1000, 36, CV_32FC1);
//cvReleaseMat(&traindata);
相关Valgrind的输出是:
==4967== HEAP SUMMARY:
==4967== in use at exit: 144,108 bytes in 2 blocks
==4967== total heap usage: 10 allocs, 8 frees, 144,772 bytes allocated
==4967==
==4967== LEAK SUMMARY:
==4967== definitely lost: 64 bytes in 1 blocks
==4967== indirectly lost: 144,044 bytes in 1 blocks
==4967== possibly lost: 0 bytes in 0 blocks
==4967== still reachable: 0 bytes in 0 blocks
==4967== suppressed: 0 bytes in 0 blocks
但如果你真的放开CvMat
CvMat* traindata = cvCreateMat(1000, 36, CV_32FC1);
cvReleaseMat(&traindata);
你得到这个输出结果现在注意到valgrind的输出:
==4957== HEAP SUMMARY:
==4957== in use at exit: 0 bytes in 0 blocks
==4957== total heap usage: 10 allocs, 10 frees, 144,772 bytes allocated
==4957==
==4957== All heap blocks were freed -- no leaks are possible
非常感谢你的回复... – user2527599
我不知道这个valgrind ..但我敢肯定,这将帮助我out..can你提供链接到任何示例的使用在Windows中使用OpenCV的valgrind – user2527599
我在你的原始问题下发布了链接到他们的网站作为评论,如果你认为它很好,你可能会接受这个答案。 – hetepeperfan
我不知道你是否知道valgrind http://valgrind.org/。它的目的是回答这些问题 – hetepeperfan