gpt4 book ai didi

gcc - 为什么 gcc 需要 gmp?

转载 作者:行者123 更新时间:2023-12-04 14:29:59 27 4
gpt4 key购买 nike

任何从源代码构建 gcc 的人都知道,gmp 是 gcc 的依赖项。为什么是这样?换句话说,gcc 实际使用它做什么?

最佳答案

请参阅 this answer 的类似(但不相同)问题。

编译器内部(在编译时)需要 GMP,特别是对于常量折叠。一些语言标准(特别是 Fortran 的一些最新版本)要求,例如1234567891234567*1234567891 以任意精度计算。

甚至 C 更喜欢使用 bigints 进行常量折叠:这是获得表达式正确结果的唯一方法(可能是在一些宏扩展后获得的,即使你没有明确地把它放在你的源代码中),比如 (123456789087651234*65125412651209128612+187451)%10000000141(140000000000041*150000000000061+134500000000139)%250000000000111 .

我忘记了 C 或 C++ 标准对此类常量表达式的看法。正确计算它们当然没有错。但是 Fortran 要求正确计算它们,这需要 bigint。我的第二个示例仅包含适合 64 位的素数,但您需要 bignums 才能正确计算结果...

此外,交叉编译时 GCC 需要更精确的主机整数。考虑一下从 32 位机器到 64 位机器的明显交叉编译,您当然希望常量折叠来计算所有 64 位!

此外,一些巧妙的优化(特别是 GCC 使用的 polyhedral optimizations 之类的 Cloog or PPL)可能需要在一次优化过程中和内部使用 bigint 算法来精确。更一般地,优化是符号处理,符号处理通常需要 bignums 。在这样的优化过程中,即使源代码只有很小的常量,也可能出现很大的数字。

关于gcc - 为什么 gcc 需要 gmp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15826628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com