Tôi có một cho vòng lặp trong đó tôi tạo đối tượng cv :: Mat cục bộ để lưu trữ hình ảnh. Mã này trông như thế này:Phát hành bộ nhớ Ma trận OpenCV sau khi lệnh imread
for (int iter = 0; iter < totalNumberOfIterations; iter++)
{
cv::Mat I = cv::imread(argv[1], 0);
std::cout << "Reference count I: " << *I.refcount << std::endl;
I.release();
}
Trong phiên đầu tiên của vòng lặp, tôi thấy rằng bộ nhớ được phân bổ cho biến "I" và nó được deallocated khi tôi gọi I.release(). Trong các lần lặp tiếp theo, bộ nhớ không được giải phóng, mức tiêu thụ RAM cho chương trình của tôi vẫn không đổi. Dường như OpenCV dự trữ bộ nhớ cho biến "I" cho mục đích tối ưu hóa. Điều này có đúng không?
Số tham chiếu cho biến "I" (* I.refcount) vẫn là 1 cho tất cả các lần lặp của cho vòng lặp.
Tôi đang sử dụng OpenCV 2.4.4 và tôi đang biên dịch mã của mình bằng gcc 4.6.4. Để kiểm tra mức tiêu thụ bộ nhớ, tôi đã sử dụng lệnh "top" trong máy tính Ubuntu 13.04 của mình.
EDIT: Khi tôi không buộc OpenCV đọc hình ảnh màu xám, tôi nhận thấy rằng bộ nhớ đang được deallocated cho biến "tôi". (Lưu ý tham số thứ hai được đặt thành "1" trong lệnh đã đọc).
cv::Mat I = cv::imread(argv[1], 1);