我工作的产品组目前正在使用 gcc 3.4.6(我们知道它很古老)作为大型低级 C 代码库,并希望升级到更高版本。在我们测试的所有硬件平台上测试不同版本的 gcc 4.x 时,我们发现了性能优势。然而我们却 非常 害怕 C 编译器错误(历史上有充分的理由),并且想知道是否有人知道我们应该升级到哪个版本。

人们是否将 4.3.2 用于大型代码库并认为它工作得很好?

有帮助吗?

解决方案

gcc 最好的质量控制是linux 内核。GCC 是基本上所有主要开源 C/C++ 程序的首选编译器。发布的 GCC,尤其是像 4.3.X 这样的版本,在主要的 Linux 发行版中,应该是相当不错的。

GCC 4.3 还对较新的 cpu 上的优化提供了更好的支持。

其他提示

当我将项目从 GCC 3 迁移到 GCC 4 时,我运行了多次测试以确保前后行为相同。您可以运行一组(希望是自动化的)测试来确认正确的行为吗?毕竟,您想要“正确”的行为,而不一定是 GCC 3 的行为。

我没有适合您的特定版本,但为什么不选择 4.X 3.4.6安装了吗?然后你可以尝试让代码在两个版本上都编译,如果你在 4 中遇到一个显示停止的错误,你就有一个退出策略。

使用最新的,但是 追寻并理解 每一个警告 -Wall 给出。为了获得额外的乐趣,还有更多警告标志可供使用。你 有一套广泛的回归(和其他)测试,运行它们并检查它们。

GCC(特别是 C++,还有 C)已经发生了很大的变化。它可以更好地进行代码分析和优化,并且可以处理以不同方式调用未定义行为的代码。因此,“工作正常”但确实依赖于无效构造的某些特定解释的代码可能会崩溃。希望编译器发出警告或错误,但不能保证这样的运气。

如果您对 OpenMP 感兴趣,那么您将需要迁移到 gcc 4.2 或更高版本。我们在大约 5M 行的代码库上使用 4.2.2,并且没有任何问题。

关于 4.3.2 我不能说什么,但我的笔记本电脑是用 GCC 4.3.{0,1} 构建的 Gentoo Linux 系统(取决于每个包的构建时间),我没有看到任何问题。不过,这主要只是标准桌面用途。如果您有任何奇怪的代码,您的里程可能会有所不同。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top