snd_pcm_hw_params_alloca() 和 snd_pcm_hw_params_malloc() 有什么区别?

What is difference between snd_pcm_hw_params_alloca() and snd_pcm_hw_params_malloc()?

我看到一些使用 alsa api 的 capture/playback 代码。其中一些使用 snd_pcm_hw_params_malloc() 而另一些使用 snd_pcm_hw_params_alloca().

它们除了一个是函数,一个是宏之外还有什么区别。 snd_pcm_hw_params_alloca() 宏是否被 snd_pcm_hw_params_malloc() 替换?

snd_pcm_hw_params_alloca() 使用 alloca() 在堆栈上分配结构。这意味着它会在您的函数 returns.

时自动释放

snd_pcm_hw_params_malloc() 使用 malloc()。您有责任在不再需要时调用 snd_pcm_hw_params_free()