gpt4 book ai didi

iphone - 将加速器用于fft时出现内存警告

转载 作者:行者123 更新时间:2023-12-01 17:57:57 25 4
gpt4 key购买 nike

我在这里发布了我使用的函数来获取加速器fft。

Setup the accelerator framework for fft on the iPhone

运行良好。
事实是,我实时使用它,因此对于每个新的音频缓冲区,我都会使用新的缓冲区调用此函数。

由于这些行,我收到了内存警告(可能)

A.realp = (float *) malloc(nOver2 * sizeof(float));
A.imagp = (float *) malloc(nOver2 * sizeof(float));

问题:
  • 我还有另一种方法,但是要一次又一次地分配它们(别忘了我必须每秒用新的缓冲区多次喂它)
  • 我究竟如何释放它们? (代码行)
  • 是否可以由fft对系统造成负担的事实引起?

  • 任何摆脱这个警告的办法都会对我有很大的帮助。

    非常感谢。

    最佳答案

    这些程序应在程序开始时执行一次:

  • 使用类似于float *buffer = malloc(NumberOfElements * sizeof *buffer);的代码为缓冲区分配内存。
  • 使用FFTSetup setup = vDSP_create_fftsetup(log2n, FFT_RADIX2);之类的代码创建FFT设置。
  • 也测试返回值。如果mallocvDSP_create_fftsetup返回0,则写一条错误消息并退出程序或采取其他异常行为。

  • 这些程序应在程序结束时执行一次:
  • 使用类似于vDSP_destroy_fftsetup(setup);的代码销毁FFT设置。
  • 使用类似于free(buffer);的代码释放缓冲区的内存。

  • 在程序的中间,当您处理样本时,代码应使用现有的缓冲区和设置。因此,指向缓冲区和设置的变量必须对该代码可见。您可以将它们作为参数传递(也许在结构中组合在一起),也可以使它们成为全局变量(对于小程序,这只是临时解决方案)。

    程序的安排应使在处理样本时永远不必分配内存或创建FFT设置。

    分配的所有内存最终应释放。

    关于iphone - 将加速器用于fft时出现内存警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14139619/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com