关于头文件的问题请教一下老师
来源:7-21 C++语言到底需不需要GC(Gabage Collector
我想跑路
2022-10-12
c/c++语言与其他编程语言再编写时倒入外部函数的方法好像都不太一样。
其他语言是通过导入函数具体的定义实现的文件。
c/c++语言是导入头文件,头文件中仅包含函数的声明。
1那么编译器是如何知道对应函数实现的源文件是哪一个呢?
2.像一些标准库文件,编译器可能是事先链接好具体的实现函数,但每编译一次就要去整个库函数中查找这样的效率会不会太低? 是不是比那些通过指定函数实现位置的来导入包 的语言效率低呢?
写回答
1回答
-
quickzhao
2022-10-12
这个过程不是你想的那么简单。你如果想详细了解整个过程,需要仔细学习一个C++预编译、编译、汇编和链接的整个过程。有的时候根本就没有你说的头文件所对应的源文件,而是编译后的二进制文件,为了隐藏一些实现的细节;简单的说你担心的问题不是问题,各个平台生成的可执行程序会有相对固定的跳转位置,保证程序的正常运行。至于你说的效率问题可能主要体现的不是编译期效率问题,而更多的是动态加载还是静态加载的调用效率问题,一般来说静态加载的效率高些,但体积会大些,属于空间换时间。如果你想详细了解一些细节,推荐你看一部书《程序员的自我修养--链接、装载和库》。顺便说下,我们正在准备的体系课中会有一些关系底层编译链接的更详细内容。
032022-10-13
相似问题