1
3
最后,确保只链接所需函数的唯一方法是确保库中的每个源(对象)文件只导出一个函数符号-每个文件一个(可见)函数。通常,有一些文件会导出几个始终一起使用的函数——例如包的初始化和终结函数。此外,导出函数通常使用的函数不需要在源(对象)文件外部可见-请确保它们
如果你看Plauger's“ The Standard C Library “,您会发现每个函数都是在一个单独的文件中实现的,即使文件最后有4行长(一个头、一个函数行、一个左大括号、一行代码和一个右大括号)。 杰伊问:
我没有说它被广泛使用——它没有。但它是确保二进制文件最小化的方法。编译器(链接器)不会为您做最小化——至少,我不知道有任何这样做。在一个大型项目中,您设计源文件,以便将通常一起使用的密切相关的函数分组到单个源文件中。只偶尔使用的函数应该放在单独的文件中。理想情况下,很少使用的函数应该每个都在自己的文件中;如果不这样做,则将它们中的小部分分组为小的(但不是最小的)文件。这样,如果使用了一个很少使用的函数,您只会得到有限数量的额外未使用的代码链接。 至于文件的数量——是的,支持的技术确实意味着很多文件。您必须权衡管理(命名)大量文件的工作负载与最小代码大小的好处。自动构建系统消除了大部分的痛苦;VCS系统处理很多文件。 另一种选择是将库代码放入共享对象或动态链接库(DLL)。然后,程序与共享对象链接,共享对象只加载一次到内存中,并在使用它的程序之间共享。为每个进程复制(非常量)数据。这会减少磁盘上程序的大小,但在加载过程中会造成修复开销。但是,您不必担心可执行文件的大小;可执行文件不包括共享对象。你可以更新这个库(如果你很小心的话),而不用重新编译使用它的主程序。可执行文件的减小是共享库流行的原因之一。 |
achoora · 如何使用内置函数而不是空检查来验证指针? 7 年前 |
Dmitry Chirkin · vxWorks内核外壳功能 8 年前 |
Ajoy · 调用taskSpawn()块,直到派生的任务完成 9 年前 |