/OPT (Pengoptimalan)
Mengontrol pengoptimalan yang dilakukan LINK selama build.
Sintaks
/OPT:{REF | NOREF}
/OPT:{ICF[=iterasi] | NOICF}
/OPT:{LBR | NOLBR}
Argumen
REF | NOREF
/OPT:REF menghilangkan fungsi dan data yang tidak pernah direferensikan; /OPT:NOREF menyimpan fungsi dan data yang tidak pernah dirujuk.
Saat /OPT:REF diaktifkan, LINK menghapus fungsi dan data paket yang tidak direferensikan, yang dikenal sebagai COMDATs. Pengoptimalan ini dikenal sebagai eliminasi COMDAT transitif. Opsi /OPT:REF juga menonaktifkan penautan bertahap.
Fungsi inlined dan fungsi anggota yang ditentukan di dalam deklarasi kelas selalu COMDAT. Semua fungsi dalam file objek dibuat menjadi COMDATs jika dikompilasi dengan menggunakan opsi /Gy . Untuk menempatkan const
data dalam COMDATs, Anda harus mendeklarasikannya dengan menggunakan __declspec(selectany)
. Untuk informasi tentang cara menentukan data untuk penghapusan atau pelipatan, lihat selectany.
Secara default, /OPT:REF diaktifkan oleh linker kecuali /OPT:NOREF atau /DEBUG ditentukan. Untuk mengambil alih default ini dan menyimpan COMDAT yang tidak direferensikan dalam program, tentukan /OPT:NOREF. Anda dapat menggunakan opsi /INCLUDE untuk mengambil alih penghapusan simbol tertentu.
Jika /DEBUG ditentukan, default untuk /OPT adalah NOREF, dan semua fungsi dipertahankan dalam gambar. Untuk mengambil alih default ini dan mengoptimalkan build debug, tentukan /OPT:REF. Ini dapat mengurangi ukuran executable Anda, dan dapat menjadi pengoptimalan yang berguna bahkan dalam build debug. Sebaiknya Anda juga menentukan /OPT:NOICF untuk mempertahankan fungsi yang identik dalam build debug. Ini membuatnya lebih mudah untuk membaca jejak tumpukan dan mengatur titik henti dalam fungsi yang jika tidak akan dilipat bersama-sama.
ICF[=iterasi] | NOICF
Gunakan ICF[=iterasi] untuk melakukan pelipatan COMDAT yang identik. COMDAT redundan dapat dihapus dari output linker. Parameter iterasi opsional menentukan berapa kali untuk melintasi simbol untuk duplikat. Jumlah default perulangan adalah 1. Iterasi tambahan dapat menemukan lebih banyak duplikat yang terungkap melalui pelipatan dalam iterasi sebelumnya.
Secara default, /OPT:ICF diaktifkan oleh linker kecuali /OPT:NOICF atau /DEBUG ditentukan. Untuk mengambil alih default ini dan mencegah COMDAT dilipat dalam program, tentukan /OPT:NOICF.
Dalam build debug, Anda harus secara eksplisit menentukan /OPT:ICF untuk mengaktifkan lipatan COMDAT. Namun, karena /OPT:ICF dapat menggabungkan data atau fungsi yang identik, itu dapat mengubah nama fungsi yang muncul dalam jejak tumpukan. Ini juga dapat membuatnya tidak mungkin untuk mengatur titik henti dalam fungsi tertentu atau untuk memeriksa beberapa data dalam debugger, dan dapat membawa Anda ke fungsi yang tidak terduga ketika Anda satu langkah melalui kode Anda. Perilaku kode identik, tetapi presentasi debugger bisa sangat membingungkan. Oleh karena itu, kami tidak menyarankan Anda menggunakan /OPT:ICF dalam build debug kecuali keuntungan dari kode yang lebih kecil melebihi kerugian ini.
Catatan
Karena /OPT:ICF dapat menyebabkan alamat yang sama ditetapkan ke fungsi yang berbeda atau anggota data baca-saja (yaitu, const
variabel saat dikompilasi dengan menggunakan /Gy), dapat merusak program yang bergantung pada alamat unik untuk fungsi atau anggota data baca-saja. Untuk informasi selengkapnya, lihat /Gy (Aktifkan Penautan Tingkat Fungsi).
LBR | NOLBR
Opsi /OPT:LBR dan /OPT:NOLBR hanya berlaku untuk biner ARM. Karena instruksi cabang prosesor ARM tertentu memiliki rentang terbatas, jika linker mendeteksi lompatan ke alamat di luar jangkauan, itu menggantikan alamat tujuan instruksi cabang dengan alamat kode "pulau" yang berisi instruksi cabang yang menargetkan tujuan aktual. Anda dapat menggunakan /OPT:LBR untuk mengoptimalkan deteksi instruksi cabang panjang dan penempatan pulau kode menengah untuk meminimalkan ukuran kode secara keseluruhan. /OPT:NOLBR menginstruksikan linker untuk menghasilkan pulau kode untuk instruksi cabang panjang seperti yang ditemui, tanpa pengoptimalan.
Secara default, opsi /OPT:LBR diatur saat penautan bertambah bertahap tidak diaktifkan. Jika Anda menginginkan tautan non-inkremental tetapi bukan pengoptimalan cabang yang panjang, tentukan /OPT:NOLBR. Opsi /OPT:LBR menonaktifkan penautan inkremental.
Keterangan
Saat digunakan di baris perintah, linker default ke /OPT:REF,ICF,LBR. Jika /DEBUG ditentukan, defaultnya adalah /OPT:NOREF,NOICF,NOLBR.
Pengoptimalan /OPT umumnya mengurangi ukuran gambar dan meningkatkan kecepatan program. Peningkatan ini dapat menjadi substansial dalam program yang lebih besar, itulah sebabnya mereka diaktifkan secara default untuk build ritel.
Pengoptimalan linker memang membutuhkan waktu ekstra di depan, tetapi kode yang dioptimalkan juga menghemat waktu ketika linker memiliki lebih sedikit relokasi untuk memperbaiki dan membuat gambar akhir yang lebih kecil, dan menghemat lebih banyak waktu ketika memiliki lebih sedikit informasi debug untuk memproses dan menulis ke PDB. Ketika pengoptimalan diaktifkan, itu dapat mengakibatkan waktu tautan yang lebih cepat secara keseluruhan, karena biaya tambahan kecil dalam analisis mungkin lebih dari offset oleh penghematan waktu dalam linker melewati biner yang lebih kecil.
Argumen /OPT dapat ditentukan bersama-sama, dipisahkan oleh koma. Misalnya, alih-alih /OPT:REF /OPT:NOICF, Anda dapat menentukan /OPT:REF,NOICF.
Anda dapat menggunakan opsi linker /VERBOSE untuk melihat fungsi yang dihapus oleh /OPT:REF dan fungsi yang dilipat oleh /OPT:ICF.
Argumen /OPT sering diatur untuk proyek yang dibuat dengan menggunakan dialog Proyek Baru di Visual Studio IDE, dan biasanya memiliki nilai yang berbeda untuk konfigurasi debug dan rilis. Jika tidak ada nilai yang diatur untuk opsi linker ini dalam proyek Anda, maka Anda mungkin mendapatkan default proyek, yang bisa berbeda dari nilai default yang digunakan oleh linker di baris perintah.
Untuk mengatur opsi penghubung OPT:ICF atau OPT:REF di lingkungan pengembangan Visual Studio
Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Pilih halaman properti Pengoptimalan Linker>Properti>Konfigurasi.
Ubah salah satu properti ini:
Aktifkan Lipatan COMDAT
Referensi
Untuk mengatur opsi penghubung OPT:LBR di lingkungan pengembangan Visual Studio
Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Pilih halaman properti Properti Konfigurasi>Penaut>Baris Perintah.
Masukkan opsi di Opsi Tambahan:
/opt:lbr
atau/opt:nolbr
Untuk menyetel opsi linker ini secara terprogram
- Lihat EnableCOMDATFolding properti dan OptimizeReferences .