/LTCG
(Pembuatan kode waktu tautan)
Gunakan /LTCG
untuk melakukan pengoptimalan seluruh program, atau untuk membuat instrumentasi pengoptimalan yang dipandu profil (PGO), melakukan pelatihan, dan membuat build yang dioptimalkan yang dipandu profil.
Sintaks
/LTCG
[:
{INCREMENTAL
STATUS
OFF
|NOSTATUS
||}]
Opsi ini tidak digunakan lagi mulai dari Visual Studio 2015:
/LTCG:
{PGINSTRUMENT
||PGOPTIMIZE
PGUPDATE
}
Argumen
INCREMENTAL
(Opsional) Menentukan bahwa linker hanya menerapkan seluruh pengoptimalan program atau pembuatan kode waktu tautan (LTCG) ke file yang terpengaruh oleh pengeditan, bukan seluruh proyek. Secara default, bendera ini tidak diatur ketika /LTCG
ditentukan, dan seluruh proyek ditautkan dengan menggunakan seluruh pengoptimalan program.
NOSTATUS
| STATUS
(Opsional) Menentukan apakah linker menampilkan indikator kemajuan yang memperlihatkan persentase tautan yang selesai. Secara default, informasi status ini tidak ditampilkan.
OFF
(Opsional) Menonaktifkan pembuatan kode waktu tautan. Linker memperlakukan semua modul yang dikompilasi seolah-olah /GL
dikompilasi tanpa opsi tersebut, dan modul MSIL apa pun menyebabkan tautan gagal.
PGINSTRUMENT
(Opsional) Opsi ini tidak digunakan lagi mulai visual Studio 2015. Sebagai gantinya, gunakan /LTCG
dan /GENPROFILE
atau /FASTGENPROFILE
untuk menghasilkan build berinstrumentasi untuk pengoptimalan yang dipandu profil. Data yang dikumpulkan dari eksekusi berinstrumen digunakan untuk membuat gambar yang dioptimalkan. Untuk informasi selengkapnya, lihat Pengoptimalan Yang Dipandu Profil. Bentuk pendek dari opsi ini adalah /LTCG:PGI
.
PGOPTIMIZE
(Opsional) Opsi ini tidak digunakan lagi mulai visual Studio 2015. Sebagai gantinya, gunakan /LTCG
dan /USEPROFILE
untuk membangun gambar yang dioptimalkan. Untuk informasi selengkapnya, lihat Pengoptimalan Yang Dipandu Profil. Bentuk pendek dari opsi ini adalah /LTCG:PGO
.
PGUPDATE
(Opsional) Opsi ini tidak digunakan lagi mulai visual Studio 2015. Sebagai gantinya, gunakan /LTCG
dan /USEPROFILE
untuk membangun kembali gambar yang dioptimalkan. Untuk informasi selengkapnya, lihat Pengoptimalan Yang Dipandu Profil. Bentuk pendek dari opsi ini adalah /LTCG:PGU
.
Keterangan
Opsi ini /LTCG
memberi tahu linker untuk memanggil pengkompilasi dan melakukan pengoptimalan seluruh program. Anda juga dapat melakukan pengoptimalan terpandu profil. Untuk informasi selengkapnya, lihat Pengoptimalan Yang Dipandu Profil.
Dengan pengecualian berikut, Anda tidak dapat menambahkan opsi linker ke kombinasi /LTCG
PGO dan /USEPROFILE
yang tidak ditentukan dalam kombinasi /LTCG
inisialisasi dan /GENPROFILE
opsi PGO sebelumnya:
Opsi linker apa pun yang ditentukan bersama dengan /LTCG
opsi dan /GENPROFILE
untuk menginisialisasi PGO tidak harus ditentukan saat Anda membangun dengan menggunakan /LTCG
dan /USEPROFILE
; mereka tersirat.
Sisa artikel ini membahas pembuatan kode waktu tautan yang dilakukan oleh /LTCG
.
/LTCG
tersirat dengan /GL
.
Linker memanggil pembuatan kode waktu tautan jika melewati modul yang dikompilasi dengan menggunakan /GL
atau modul MSIL (lihat .netmodule
File sebagai Input Linker). Jika Anda tidak secara eksplisit menentukan kapan Anda meneruskan /LTCG
/GL
atau modul MSIL ke linker, linker akhirnya mendeteksi situasi ini dan memulai ulang tautan dengan menggunakan /LTCG
. Tentukan /LTCG
secara eksplisit saat Anda meneruskan /GL
dan modul MSIL ke linker untuk performa build tercepat yang mungkin.
Untuk performa yang lebih cepat, gunakan /LTCG:INCREMENTAL
. Opsi ini memberi tahu linker untuk mengoptimalisasi ulang hanya file yang terpengaruh oleh perubahan file sumber, alih-alih seluruh proyek. Opsi ini dapat secara signifikan mengurangi waktu tautan yang diperlukan. Opsi ini tidak sama dengan penautan inkremental. Jika Anda menghapus /LTCG:INCREMENTAL
opsi, hapus juga opsi apa pun /LTCGOUT
untuk meningkatkan waktu build dan pemanfaatan disk.
/LTCG
tidak valid untuk digunakan dengan /INCREMENTAL
.
Kapan /LTCG
digunakan untuk menautkan modul yang dikompilasi dengan menggunakan /Og
, , /O1
, /O2
atau /Ox
, pengoptimalan berikut dilakukan:
Inlining lintas modul
Alokasi register interprocedural (hanya sistem operasi 64-bit)
Konvensi panggilan kustom (hanya x86)
Perpindahan TLS kecil (hanya x86)
Perataan ganda tumpukan (hanya x86)
Peningkatan disambiguasi memori (informasi gangguan yang lebih baik untuk variabel global dan parameter input)
Catatan
Linker menentukan pengoptimalan mana yang digunakan untuk mengkompilasi setiap fungsi dan menerapkan pengoptimalan yang sama pada waktu tautan.
Menggunakan /LTCG
dan /O2
menyebabkan pengoptimalan perataan ganda.
Jika /LTCG
dan /O1
ditentukan, perataan ganda tidak dilakukan. Jika sebagian besar fungsi dalam aplikasi dikompilasi untuk kecepatan, dengan beberapa fungsi yang dikompilasi untuk ukuran (misalnya, dengan menggunakan optimize
pragma), pengkompilasi menyelaraskan dua kali fungsi yang dioptimalkan untuk ukuran jika mereka memanggil fungsi yang memerlukan penyelarasan ganda.
Jika kompilator dapat mengidentifikasi semua situs panggilan fungsi, pengkompilasi mengabaikan pengubah konvensi panggilan eksplisit, dan mencoba mengoptimalkan konvensi panggilan fungsi:
meneruskan parameter dalam register
mengurutkan ulang parameter untuk perataan
menghapus parameter yang tidak digunakan
Jika fungsi dipanggil melalui penunjuk fungsi, atau jika fungsi dipanggil dari luar modul yang dikompilasi dengan menggunakan /GL
, pengkompilasi tidak mencoba mengoptimalkan konvensi panggilan fungsi.
Catatan
Jika Anda menggunakan /LTCG
dan mendefinisikan mainCRTStartup
ulang , aplikasi Anda dapat memiliki perilaku yang tidak dapat diprediksi yang berkaitan dengan kode pengguna yang dijalankan sebelum objek global diinisialisasi. Ada tiga cara untuk mengatasi masalah ini: jangan tentukan mainCRTStartup
ulang , jangan kompilasi file yang berisi mainCRTStartup
dengan menggunakan /LTCG
, atau inisialisasi variabel global dan objek secara statis.
/LTCG
dan Modul MSIL
Modul yang dikompilasi dengan menggunakan /GL
dan /clr
dapat digunakan sebagai input ke linker ketika /LTCG
ditentukan.
/LTCG
dapat menerima file objek asli, dan file objek asli/terkelola campuran (dikompilasi dengan menggunakan/clr
). Opsi/clr:pure
pengkompilasi dan/clr:safe
tidak digunakan lagi di Visual Studio 2015 dan tidak didukung di Visual Studio 2017 dan yang lebih baru./LTCG:PGI
tidak menerima modul asli yang dikompilasi dengan menggunakan/GL
dan/clr
Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio
Properti Pengoptimalan Seluruh Program menetapkan beberapa opsi pengkompilasi dan linker, termasuk /LTCG
. Sebaiknya gunakan properti ini untuk mengubah pengaturan untuk seluruh konfigurasi build. Untuk mengatur Pengoptimalan Seluruh Program untuk proyek Anda:
Buka kotak dialog Halaman Properti proyek. Untuk informasi selengkapnya, lihat Mengatur properti kompilator dan build.
Pilih halaman properti Umum Properti>Konfigurasi.
Ubah properti Pengoptimalan Seluruh Program. Pilih OK atau Terapkan untuk menyimpan perubahan Anda.
Anda juga dapat menerapkan /LTCG
ke build tertentu dengan memilih Pengoptimalan Terpandu Profil Build>pada bilah menu, atau dengan memilih salah satu opsi Pengoptimalan Terpandu Profil pada menu pintasan untuk proyek.
Untuk mengaktifkan Pembuatan Kode Waktu Tautan secara terpisah atau atur opsi Pembuatan Kode Waktu Tautan tertentu:
Buka kotak dialog Halaman Properti proyek.
Pilih halaman properti Pengoptimalan Linker>Properti>Konfigurasi.
Ubah properti Pembuatan Kode Waktu Tautan ke salah satu opsi berikut:
- Default
- Gunakan Pembuatan Kode Waktu Tautan Cepat (LTCG:inkremental)
- Menggunakan Pembuatan Kode Waktu Tautan (LTCG)
- Pengoptimalan Terpandu Profil - Instrumen (LTCG:PGInstrument)
- Pengoptimalan Terpandu Profil - Pengoptimalan (LTCG:PGOptimize)
- Pengoptimalan Terpandu Profil - Pembaruan (LTCG:PGUpdate)
Pilih OK atau Terapkan untuk menyimpan perubahan Anda.
Untuk menentukan apakah linker menampilkan indikator kemajuan untuk Pembuatan Kode Waktu Tautan:
Buka kotak dialog Halaman Properti proyek.
Pilih halaman properti Umum Linker>Properti>Konfigurasi.
Ubah properti Status Tautan. Pilih OK atau Terapkan untuk menyimpan perubahan Anda.
Untuk mengatur opsi pengkompilasi ini secara terprogram
- Lihat LinkTimeCodeGeneration.