提问人:13steinj 提问时间:12/27/2020 最后编辑:13steinj 更新时间:12/27/2020 访问量:43
包含 iostream 标头的奇怪行为——基于第一个符号的奇怪编译器生成的函数?
Odd behavior on including iostream header-- odd compiler generated function based on first symbol?
问:
在 GCC 中包含标头时,我注意到了一些奇怪的行为。iostream
编辑:奇怪的行为代码,因为注释希望它很糟糕,而不是带有dissasembly的代码视图:
#include <iostream>
int main() {}
实际上,任何简单的都可以使用文件中的其他一些符号,同样会生成奇怪的汇编。
(编辑结束)。#include <iostream>
我知道它需要设置一些全局静态变量,所以我理解需要调用其中的一些函数。__static_initialization_and_destruction_0(int, int)
std::ios_base
然而,这个函数本身总是被奇怪地调用——编译器根据文件中遇到的第一个符号创建一个标签/函数。如果不存在这样的符号,则使用文件名(这是我所期望的,也是 clang 总是这样做的)。
然而,即便如此,整个事情还是有点奇怪,这个助手所做的只是在调用上述函数之前设置带有常量的寄存器。在 GCC 上,在函数内部,在继续之前将常量设置寄存器与常量进行比较,在 clang 上,根本没有设置寄存器,也没有比较任何寄存器。__static_initialization...
为什么要这样做(我的意思是,设计决策,如果有人能理解一个猜测,不是导致它的文字代码,但代码也会很有趣)。
答: 暂无答案
评论
ios_base
__static_init...