使用 vlfeat 时是不是必须显式释放内存?

Posted

技术标签:

【中文标题】使用 vlfeat 时是不是必须显式释放内存?【英文标题】:Do I have to explicitly free memory when using vlfeat?使用 vlfeat 时是否必须显式释放内存? 【发布时间】:2017-06-01 00:24:05 【问题描述】:

我正在使用 VLFeat 训练一个高斯混合模型 (GMM),我不确定在使用以下命令时是否应该手动释放内存:

float *means = (float *) vl_gmm_get_means(gmm);
float *covariances = (float *) vl_gmm_get_covariances(gmm);
float *priors = (float *) vl_gmm_get_priors(gmm);

我必须手动编写如下代码吗?

free(means);
free(covariances);
free(priors);

谢谢!

【问题讨论】:

【参考方案1】:

不知道“让 Visual Studio 完成它的工作”是什么意思...

如果分配了内存,则需要释放它。 C++ 不是垃圾回收语言,因此所有内存分配/释放都是通过 new/delete(或 malloc/free)显式进行的。

我从未使用过有问题的库 (VLFeat),但我搜索了它的内存分配功能。我的猜测是,您应该使用vl_free() 来释放库返回的内存。实现可能只是包装free() 或其他一些函数,但通常对于这样的库,您应该使用库函数来管理从库返回的内存。

vl_free() 的文档指出:此函数释放由 vl_malloc、vl_calloc 或 vl_realloc 分配的内存块。概要与 POSIX malloc 函数相同。

【讨论】:

谢谢。但我不确定函数vl_gmm_get_means(gmm); 是如何实现的,因为它是一个内置函数并且源代码不可用......不过,为了安全起见,我仍然可以尝试vl_free 任何东西......

以上是关于使用 vlfeat 时是不是必须显式释放内存?的主要内容,如果未能解决你的问题,请参考以下文章

即使在 ARC 下,在 GCD 中使用 Realm 时,我们是不是必须使用显式自动释放池

如何在Python中显式释放内存?

了解自己主动内存管理

释放内存时是不是需要使用IF语句? [复制]

Java内存管理——垃圾收集

我是不是必须在 Opencv C 包装器中为 C++ 接口释放 New 分配的内存