GNU/Linux >> Belajar Linux >  >> Linux

Apa itu tautan emas?

gold linker dirancang sebagai linker khusus ELF, dengan maksud untuk menghasilkan linker yang lebih mudah dipelihara dan lebih cepat daripada BFD ld (penghubung binutils GNU “tradisional”). Sebagai efek samping, memang dapat menghubungkan program yang sangat besar dengan menggunakan memori yang lebih sedikit daripada BFD ld , mungkin karena lapisan abstraksi yang harus ditangani lebih sedikit, dan karena struktur data penaut dipetakan lebih langsung ke format ELF.

Saya tidak yakin ada banyak dokumentasi yang secara khusus membahas perbedaan desain antara kedua penghubung, dan pengaruhnya terhadap penggunaan memori. Ada serangkaian artikel yang sangat menarik tentang linker oleh Ian Lance Taylor, penulis berbagai linker GNU, yang menjelaskan banyak keputusan desain yang mengarah ke gold . Dia menulis itu

Penghubung tempat saya bekerja sekarang, disebut emas, akan menjadi yang ketiga. Ini secara eksklusif merupakan linker ELF. Sekali lagi, tujuannya adalah kecepatan, dalam hal ini lebih cepat dari linker kedua saya. Penghubung itu telah diperlambat secara signifikan selama bertahun-tahun dengan menambahkan dukungan untuk ELF dan untuk perpustakaan bersama. Dukungan ini ditambal alih-alih dirancang.

(Linker kedua adalah BFD ld .)


Tautan emas ditulis untuk membuat proses tautan jauh lebih cepat. Menurut penulis emas Ian Lance Taylor

Saat ini emas hanya memiliki satu keunggulan signifikan dibandingkan linker yang ada:lebih cepat. Pada program C++ besar, saya mengukurnya berjalan lima kali lebih cepat.

Dia membandingkan kinerja penghubung emas dengan penghubung GNU tradisional. gold (tidak seperti GNU linker) tidak menggunakan pustaka BFD untuk memproses file objek.

Batasan emas adalah (tidak seperti tautan GNU yang dapat memproses banyak jenis file objek) ia hanya dapat menautkan file objek berformat ELF.

Mengenai masalah yang Anda hadapi saat menggunakan linker GNU, berikut adalah jawaban menarik untuk pertanyaan serupa tentang SO dari Michael Adam:

Penghubung emas bahkan menemukan beberapa masalah ketergantungan dalam kode kita, karena tampaknya lebih benar daripada yang klasik sehubungan dengan beberapa detail. Lihat, mis. komit Samba ini.


gold vs ld tolok ukur

Saya telah menerbitkan tolok ukur sintetis beton ld vs emas di:https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263

Ringkasan hasil:emas 2x hingga 3x kali lebih cepat daripada ld.

Perolehan waktu ini bisa menjadi pengubah permainan yang sangat besar pada proyek C++ yang kompleks dengan templat dan pembuatan kode yang tidak terkendali, karena langkah tautan melibatkan semua file dari proyek, dan tidak seperti kompilasi, itu harus selalu dilakukan, bahkan jika Anda mengubah hanya satu file .cpp.

Jadi waktu tautan yang lambat membuat siklus pengembangan tidak tertahankan, dan kemungkinan besar merupakan alasan utama Google memasukkan sumber daya ke dalamnya. Bayangkan saja keuntungan menunggu 10 detik daripada 30 detik untuk setiap perubahan file sepele.

Perolehan waktu dari tolok ukur sintetik juga sesuai dengan keuntungan aktual yang saya dapatkan pada proyek dunia nyata yang kompleks (gem5), seperti yang juga disebutkan pada jawaban itu.


Linux
  1. Apa runlevel sistem Linux saat ini?

  2. Apa yang Terjadi Pada Ruang Kosong?

  3. Apa trik LD_PRELOAD?

  1. Linux vs. Unix:Apa bedanya?

  2. Apa yang dimaksud dengan POSIX?

  3. Apa itu pengguna debian-+?

  1. Apa arti dari *nix?

  2. Apa konsep vruntime di CFS

  3. Apa gunanya $# di Bash