如何释放Kiss FFT分配的内存?

时间:2014-07-07 21:29:00

标签: c++ memory-management embedded kissfft

我正在使用FRDM-KL25Z板来测量振动的C ++项目。我的代码正在运行,但我需要它在循环上运行。我遇到内存问题,我没有足够的空间来存储两次值。我使用了free()命令,但即便如此,我也没有得到所有记忆。有人知道如何清理kiss-fft使用的所有内存?它没有自由功能,或者在列表中它没有正常工作。

我有足够的内存只运行一次并显示结果。我试图用这个函数做一个循环,但即使使用自由命令我也没有得到我的初始内存。

{

void TestFftReal(const char* title, const kiss_fft_scalar in[L], kiss_fft_cpx out[L / 2 + 1])
  kiss_fftr_cfg cfg;
  cfg = kiss_fftr_alloc(L, 0/*is_inverse_fft*/, NULL, NULL);

  if (cfg != NULL) {
      size_t i;
      kiss_fftr(cfg, in, out);
      free(cfg);
  /// Do stuff ///
  } else {
     printf("Not enough memory.\n");
      exit(-1);
  } 
}

1 个答案:

答案 0 :(得分:2)

文件kiss_fft.h列出了一个名为KISS_FFT_USE_ALLOCA的开关。如果在编译时定义此宏,则在堆栈上分配所需的内存而不是使用malloc。函数结束时自动释放。

您必须编写循环体以包含一个函数来分配空间并运行fft,以便它在下一次循环迭代之前返回(并释放空间)。