uClibc vs glibc用于实时Linux应用程序编程

时间:2013-01-22 17:20:09

标签: c linux glibc uclibc

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

我会以便携式编写您的应用程序,以便您可以推迟建立时间的决定。为了给您更好的答案,我们需要知道您想要使用的实时功能。

答案 2 :(得分:0)

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

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