/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|NOSTATUS|STATUS|OFF}]

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, /O2atau /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 mainCRTStartupulang , 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 mainCRTStartupulang , 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 Program Siapa le menetapkan beberapa opsi pengkompilasi dan linker, termasuk /LTCG. Sebaiknya gunakan properti ini untuk mengubah pengaturan untuk seluruh konfigurasi build. Untuk mengatur Pengoptimalan Program Siapa le untuk proyek Anda:

  1. Buka kotak dialog Halaman Properti proyek. Untuk informasi selengkapnya, lihat Mengatur properti kompilator dan build.

  2. Pilih halaman properti Umum Properti>Konfigurasi.

  3. Ubah properti Pengoptimalan Program Siapa le. Pilih OK atau Terapkan untuk menyimpan perubahan Anda.

Anda juga dapat menerapkan /LTCG ke build tertentu dengan memilih PengoptimalanTerpandu 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:

  1. Buka kotak dialog Halaman Properti proyek.

  2. Pilih halaman properti Pengoptimalan Linker>Properti>Konfigurasi.

  3. 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)
  4. Pilih OK atau Terapkan untuk menyimpan perubahan Anda.

Untuk menentukan apakah linker menampilkan indikator kemajuan untuk Pembuatan Kode Waktu Tautan:

  1. Buka kotak dialog Halaman Properti proyek.

  2. Pilih halaman properti Umum Linker>Properti>Konfigurasi.

  3. Ubah properti Status Tautan. Pilih OK atau Terapkan untuk menyimpan perubahan Anda.

Untuk mengatur opsi pengkompilasi ini secara terprogram

Baca juga

Referensi linker MSVC
Opsi linker MSVC