繁体   English   中英

为什么函数定义的顺序会改变输出二进制?

[英]Why does the order of a function definition change the output binary?

鉴于这两个C程序

功能原型和声明
after.c

#include<stdio.h>
void hi();
int main(){
  hi();
  return 0;
}
void hi(){
  puts("hello world");
}

仅限功能定义
before.c

#include<stdio.h>
void hi(){
  puts("hello world");
}

int main(){
  hi();
  return 0;
}

编译:
cc -o after.c.
cc -obefore.c之前

md5sum *
efac7a08389095a718b7fc9e163719ca之后
41e81298acdf96091b4a9326a4557b0c after.c
d5b87a14479e764f1c8a8669182773a1之前
924ec57ea6ef7ee306edfd0ec7f5fd54 before.c

如您所见,它将生成不同的二进制文件。 为什么会这样? 之前和之后有什么不同? 有速度差吗?

编译器/链接器工具链不需要为等效程序生成具有相同校验和的可执行文件。 实际上,当同一程序重建两次时,某些平台上的某些编译器会生成不同的可执行文件。

例如,参见每次重新编译后不同的exe校验和

您必须分析到可执行文件以查看是否存在任何性能差异(在您的示例中,几乎肯定没有)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM