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