3

我正在编写一个在 Linux (Kernel 3.0) 上运行的用户空间音频应用程序,它需要实时行为。我应该选择 glibc 还是 uClibC ?uClibC 和 glibc 如何在实时行为方面进行比较?

(编辑:我的是一个带有 nand flash 的嵌入式系统。它使用带有 glibc 的外部 gcc 工具链的 buildroot。如果需要,我也可以使用带有 uClibc 的 buildroot 内部工具链)

4

3 回答 3

3

实际上,我认为没有人可以肯定地说出任何一种方式。原因是您的代码很可能以一种比另一种变体更好/更差的方式使用 C 库。

唯一合理的方法是使用 glibc 运行代码,然后在相同的条件下使用 uclibc。比较完成这项工作所需的时间。在你的情况下哪个更好?- 如果这将进入某种嵌入式系统,请确保您在您希望它运行的处理器上进行测量,而不是某些具有完全不同指令集、不同缓存大小、不同内存速度等的 PC 处理器.

你说你使用了很多 malloc - 也许如果你认为这是你速度的限制因素,你应该考虑一种你不使用 malloc 的方法。特别是,在你的“热路径”中调用 malloc 不是一个好主意,除非你绝对必须这样做。

另请注意,Linux 不是实时操作系统。你只能期待 Linux 的半实时行为,如果你的应用程序真的依赖于能够在一定时间内处理它的音频,并且在特定条件下它可以“​​不运行”多长时间等,你将需要向内核添加扩展 - 我不太熟悉哪些适用于内核版本、工作负载类型等。

于 2013-01-22T20:40:29.700 回答
0

我会以可移植的方式编写您的应用程序,这样您就可以推迟构建时间的决定。为了给您更好的答案,我们需要知道您想要使用哪些实时功能。

于 2013-01-22T17:42:41.567 回答
0

使用系统上安装的 C 库。任何给定的 Linux 发行版通常会使用 glibc(对于大多数发行版,包括桌面和服务器系统)或 uClibc(在某些嵌入式发行版中)。混合和匹配这两者是相当混乱的,并且会使构建、调试和分发你的应用程序变得异常复杂。

这两个库的性能特征通常非常相似,不太可能对您的应用程序产生任何重大影响。

于 2013-01-22T21:49:05.620 回答