首页 > 后端开发 > C++ > 不同的 C 函数可以具有相同的地址吗?

不同的 C 函数可以具有相同的地址吗?

Patricia Arquette
发布: 2024-12-08 03:34:11
原创
459 人浏览过

Can Distinct C   Functions Have the Same Address?

函数指针相等和函数合并

问题:

不同的函数可以有相同的值吗地址?例如, &foo 和 &bar 保证不相等,而 &foo 保证不相等吗?和 保证不同?

答案:

C 标准允许实现优化具有相同定义的函数并将它们合并为单个函数。这意味着两个这样的函数的地址可能不相同。

标准合规性:

关于函数指针相等的缺陷报告 1400 承认了这种优化,但表明它不是明确标准是否需要明确解决这个问题。委员会的回应指出,实现可以在“假设”规则的限制内自由优化。

“假设”规则:

下根据“as-if”规则,实现可以模拟可观察的行为,而无需遵守特定的实现细节。由于函数的地址没有明确要求不同,因此这种优化并不违反规则。

相等运算符:

根据标准第 5.10 节,两个如果指针都为空、指向同一函数或表示同一地址,则它们比较相等。这允许实现将相同的地址分配给两个具有相同定义的函数。

观察:

Keith Thompson 指出打印 &foo == &bar 的结果是可观察的行为。通过合并函数更改可观察的行为可能会破坏此类程序。

此外, 中的 SIG_DFL 和 SIG_ERR 等宏可能会破坏此类程序。需要生成与任何可声明函数的地址不相等的不同值。这意味着具有相同地址的函数将违反此要求。

过程间优化:

GCC 开发人员 Jan Hubička 确认将相同的函数折叠到相同的地址是不合格行为。它破坏了 GCC 预编译头代码中依赖地址比较的某些部分。

结论:

虽然标准没有明确禁止合并相同函数的优化,但它重要的是要考虑对依赖于不同函数地址的代码的潜在影响。实现应谨慎对待这种优化,并在可观察行为受到影响的情况下避免使用它。

以上是不同的 C 函数可以具有相同的地址吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板