簡體   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