ฉันสร้างโปรแกรม C สองโปรแกรม
โปรแกรม 1
int main() { }
โปรแกรม 2
int main() { //Some Harmless comments }
AFAIK เมื่อรวบรวมคอมไพเลอร์ (gcc) ควรละเว้นความคิดเห็นและพื้นที่สีขาวที่ซ้ำซ้อนและด้วยเหตุนี้ผลลัพธ์จึงต้องใกล้เคียงกัน
แต่เมื่อฉันตรวจสอบ md5sums ของไบนารีเอาต์พุตมันไม่ตรงกัน ฉันลองรวบรวมด้วยการเพิ่มประสิทธิภาพ-O3
แล้ว-Ofast
แต่ก็ยังไม่ตรงกัน
เกิดอะไรขึ้นที่นี่?
แก้ไข: คำสั่งที่แน่นอนและมี md5sums คือ (t1.c คือโปรแกรม 1 และ t2.c คือโปรแกรม 2)
gcc ./t1.c -o aaa
gcc ./t2.c -o bbb
98c1a86e593fd0181383662e68bac22f aaa
c10293cbe6031b13dc6244d01b4d2793 bbb
gcc ./t2.c -Ofast -o bbb
gcc ./t1.c -Ofast -o aaa
2f65a6d5bc9bf1351bdd6919a766fa10 aaa
c0bee139c47183ce62e10c3dbc13c614 bbb
gcc ./t1.c -O3 -o aaa
gcc ./t2.c -O3 -o bbb
564a39d982710b0070bb9349bfc0e2cd aaa
ad89b15e73b26e32026fd0f1dc152cd2 bbb
และใช่ md5sums จะจับคู่กับการคอมไพล์หลายรายการที่มีแฟล็กเดียวกัน
BTW ระบบของฉันคือgcc (GCC) 5.2.0
และLinux 4.2.0-1-MANJARO #1 SMP PREEMPT x86_64 GNU/Linux