无论何时编译c文件,都会生成一个obj文件.我想知道,obj文件的大小在什么因素上依赖?
@H_404_2@只是为了让我的问题更清楚,
例如,c文件包含一个类声明,该类有1个整数变量作为数据成员,并且还有一些成员函数.如果我编译这个文件,那么一些对象文件将被创建一些X大小.现在假设我添加更多的数据成员和成员函数,那么obj文件的大小会改变吗?
例如,c文件包含一个类声明,该类有1个整数变量作为数据成员,并且还有一些成员函数.如果我编译这个文件,那么一些对象文件将被创建一些X大小.现在假设我添加更多的数据成员和成员函数,那么obj文件的大小会改变吗?
解决方法
这取决于一百万个不同的因素,完全依赖平台和编译器和设置.
@H_404_2@对象文件必须包含用于具有外部链接的函数的函数体的所有组件,以及具有外部链接的所有全局变量.任何具有内部链接的内容都可能或可能不保证对象文件中的单独条目,因为这些可能已被优化并直接集成到其呼叫站点中.这很大程度上取决于优化设置.
@H_404_2@GCC还有一个“链接时间优化”的选项,它基本上将整个源代码的副本添加到对象文件中,并大大增加其大小.
@H_404_2@调试符号还增加了大量额外的数据.
@H_404_2@对于您的C特定问题:类定义本身在程序集中不是真正可见的.非内联成员函数只是更多的函数必须编译,而数据成员只是被处理与原始数据成员相同 – 如果您声明该类型的实例,它们将在调用栈上,但不直接影响汇编代码…除非您使用常量初始化事物;当然,常量会进入代码.