V K*_*V K 9 c++ compiler-construction object-files
每当我们编译c ++文件时,都会生成一个obj文件.我想知道obj文件的大小取决于哪些因素?
只是为了让我的问题更清楚,例如,一个c ++文件包含一个类声明,这个类有一个整数变量作为数据成员,并且还有一些成员函数.如果我编译这个文件,那么将创建一些某些X大小的obj文件.现在假设我添加了更多数据成员和成员函数,那么obj文件的大小会改变吗?
Ker*_* SB 10
这取决于一百万个不同的因素,完全取决于平台,编译器和设置.
目标文件必须包含具有外部链接的函数的函数体的所有程序集,以及具有外部链接的所有全局变量.任何具有内部链接的内容可能会或可能不会保证目标文件中的单独条目,因为这些条目可能已被优化并直接集成到其调用站点中.这在很大程度上取决于优化设置.
GCC还有一个"链接时优化"选项,它实际上将整个源代码的副本添加到目标文件中,并大大增加了它的大小.
调试符号还会添加大量额外数据.
对于特定于C++的问题:类定义本身在程序集中不可见.非内联成员函数只是必须编译的更多函数,而数据成员只是与原始数据成员相同 - 如果您声明该类型的实例,它们将在调用堆栈上,但它们不直接影响汇编代码......除非你用常量初始化东西; 当然,常量会进入代码.