Я работаю над проектом C ++ с использованием платы FRDM-KL25Z для измерения вибрации. Мой код работает, но мне нужно, чтобы он работал в цикле. У меня проблемы с памятью, мне не хватает места для хранения значений дважды. Я использовал команды 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);
}
}
Файл kiss_fft.h перечисляет переключатель с именем KISS_FFT_USE_ALLOCA
, Если вы определяете этот макрос во время компиляции, тогда необходимая память выделяется в стеке вместо использования malloc. Это автоматически освобождается, когда функция заканчивается.
Вам нужно написать тело вашего цикла, чтобы оно содержало функцию для выделения пространства и запуска fft, чтобы она возвращала (и освобождала пространство) перед следующей итерацией цикла.