[英]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.