/Os, /Ot (Mendukung Kode Kecil, Mendukung Kode Cepat)

Opsi /Os pengkompilasi dan /Ot menentukan apakah akan mendukung ukuran (/Os) atau kecepatan (/Ot) saat mengoptimalkan kode.

Sintaks

/Os
/Ot

Keterangan

/Os (Favor Small Code) meminimalkan ukuran EXEs dan DLL dengan menginstruksikan pengkompilasi untuk mendukung ukuran di atas kecepatan. Pengkompilasi dapat mengurangi banyak konstruksi C dan C++ ke urutan kode mesin yang serupa secara fungsional. Terkadang perbedaan ini menawarkan tradeoff ukuran versus kecepatan. Opsi /Os dan /Ot memungkinkan Anda menentukan preferensi untuk satu di atas yang lain:

/Ot (Mendukung Kode Cepat) memaksimalkan kecepatan EXEs dan DLL dengan menginstruksikan pengkompilasi untuk mendukung kecepatan melebihi ukuran. /Ot adalah default ketika pengoptimalan diaktifkan. Pengkompilasi dapat mengurangi banyak konstruksi C dan C++ ke urutan kode mesin yang serupa secara fungsional. Terkadang, perbedaan ini menawarkan tradeoff ukuran versus kecepatan. Opsi /Ot ini tersirat oleh /O2 opsi (Maksimalkan kecepatan). Opsi ini /O2 menggabungkan beberapa opsi untuk menghasilkan kode yang lebih cepat.

Catatan

Informasi yang dikumpulkan dari pengujian pembuatan profil akan mengambil alih pengoptimalan apa pun yang akan berlaku jika Anda menentukan /Ob, , /Osatau /Ot. Untuk informasi selengkapnya, lihat Pengoptimalan Yang Dipandu Profil.

Contoh khusus x86

Contoh kode berikut menunjukkan perbedaan antara /Os opsi (Mendukung kode kecil) dan /Ot opsi (Mendukung kode cepat):

Catatan

Contoh ini menjelaskan perilaku yang diharapkan saat menggunakan /Os atau /Ot. Namun, perilaku pengkompilasi dari rilis ke rilis dapat mengakibatkan pengoptimalan yang berbeda untuk kode di bawah ini.

/* differ.c
  This program implements a multiplication operator
  Compile with /Os to implement multiply explicitly as multiply.
  Compile with /Ot to implement as a series of shift and LEA instructions.
*/
int differ(int x)
{
    return x * 71;
}

Seperti yang ditunjukkan dalam fragmen kode mesin di bawah ini, ketika differ.c dikompilasi untuk ukuran (/Os), pengkompilasi mengimplementasikan ekspresi perkalian dalam pernyataan pengembalian secara eksplisit sebagai perkalian untuk menghasilkan urutan kode yang pendek tetapi lebih lambat:

mov    eax, DWORD PTR _x$[ebp]
imul   eax, 71                  ; 00000047H

Secara bergantian, ketika differ.c dikompilasi untuk kecepatan (/Ot), pengkompilasi mengimplementasikan ekspresi perkalian dalam pernyataan pengembalian sebagai serangkaian pergeseran dan LEA instruksi untuk menghasilkan urutan kode yang cepat tetapi lebih lama:

mov    eax, DWORD PTR _x$[ebp]
mov    ecx, eax
shl    eax, 3
lea    eax, DWORD PTR [eax+eax*8]
sub    eax, ecx

Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio

  1. Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.

  2. Pilih halaman properti Properti>Konfigurasi C/C++>Optimasi.

  3. Ubah properti Ukuran atau Kecepatan Dukungan.

Untuk mengatur opsi pengkompilasi ini secara terprogram

Baca juga

Opsi /O (Optimalkan kode)
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC