为什么我应该使用“PaUtil_AllocateMemory”而不是malloc()?

时间:2014-03-24 17:08:58

标签: c memory-management portaudio

我看了this example from the Portaudio page并想知道作者为何使用

data.rBufToRTData = PaUtil_AllocateMemory(sizeof(OceanWave*) * 256);

而不是

data.rBufToRTData = malloc(sizeof(OceanWave*) * 256);

我在Portaudio网站上找不到答案。

2 个答案:

答案 0 :(得分:1)

您不应该使用PaUtil_AllocateMemory()。它不是PortAudio公共API的一部分。我提交了bug against the example。谢谢你提出这个问题。

也就是说,该示例似乎旨在演示在PortAudio中使用某些低级内部数据结构。特别是PortAudio环缓冲区。它不应被视为使用PortAudio公共API的一个很好的例子。

答案 1 :(得分:0)

图书馆可以使用自己的分配功能有几个原因:

  1. 他们可以使用内存预分配或缓存来提高性能。
  2. 它允许他们跟踪引用,使捕获内存泄漏更容易。
  3. 如果您将Portaudio用作DLL,则可确保结构全部分配在同一堆上。
  4. 确保所有内存分配都与特定字节边界对齐。
  5. 查看PortAudio源代码,看起来如果启用了内存跟踪,它们会使用分配方法跟踪引用,并确保内存全部分配在同一堆上。

    无论哪种方式,最佳做法是使用库的分配和免费功能(如果提供)。