【问题标题】:why linking to a static library is generally faster than linking to individual source files?为什么链接到静态库通常比链接到单个源文件更快?
【发布时间】:2017-10-22 14:43:01
【问题描述】:

案例1.gcc -o 程序main.o file1.o file2.o

案例 2.ar crv foo.a file1.o file2.o 然后,gcc -o program main.o foo.a

在编译时,链接到静态库(案例 2)通常比链接到单个源文件更快。(案例 1)

为什么以及什么情况?

感谢任何帮助。

/* Filename :lib.h */
void file2(char *);
void file1(int);

main.c

#include "lib.h"
int main()
{
    file1(3);
    file2("Hello World");
    return 0;
}

file1.c

#include <stdio.h>
#include "lib.h"
void file1(int arg) {
    printf("you passed %d\n", arg);
} 

file2.c

#include <stdio.h>
#include "lib.h"
void file2(char* arg) {
    printf("you passed %s\n", arg); 
}

【问题讨论】:

  • main.o中的函数引用了file1.o和file2.o中的哪些函数?
  • @MarkPlotnick 我添加了源代码
  • 请定义“更快” 你的意思是运行时执行更快吗?还是“程序”的构建更快?
  • 您实际测量过差异吗?还是这只是一个假设?
  • @Rich 在我的大学考试中,它有以下问题。 如果不创建静态库 foo.a 就直接运行 gcc -o program main.o file1.o file2.o,编译速度可能会变慢。在某些情况下解释一下。

标签: linux unix static-libraries


【解决方案1】:

我能想到的唯一情况是您的目标文件相当大。

链接到库只会“拉入”引用的项目。因此,您的可执行文件可以更小,并且内存中的函数更接近以缩短跳转时间。但这在现代平台中不太可能发生。

【讨论】:

    猜你喜欢
    • 2018-06-07
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多