如何解决包含 iostream 标头的奇怪行为 - 基于第一个符号的奇怪编译器生成的函数?
在 GCC 中包含 iostream
标头时,我注意到了一些 odd behavior。
编辑:奇怪的行为代码,因为评论希望它直接而不是带有拆卸的代码视图:
#include <iostream>
int main() {}
实际上,任何简单的 #include <iostream>
都可以处理文件中的其他一些符号,同样会生成奇怪的程序集。
(编辑结束)。
我知道它需要设置一些全局静态变量,所以我理解需要 __static_initialization_and_destruction_0(int,int)
来调用 std::ios_base
的一些函数。
然而,这个函数本身总是被奇怪地调用——编译器根据文件中遇到的第一个符号创建一个标签/函数。如果不存在这样的符号,它将使用文件名(这是我所期望的,也是 clang 总是这样做的)。
然而,即便如此,整个事情还是有点奇怪,这个助手所做的只是在调用上述函数之前用常量设置寄存器。在 GCC 上,在 __static_initialization...
函数内部,常量设置寄存器在继续之前与常量进行比较,在 clang 上,根本没有设置寄存器,也没有比较寄存器。
为什么要这样做(我的意思是设计决策,如果有人能猜到的话,不是导致它的文字代码,而是代码也会很有趣)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。