/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
, , /Os
atau /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
Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Pilih halaman properti Properti>Konfigurasi C/C++>Optimasi.
Ubah properti Ukuran atau Kecepatan Dukungan.
Untuk mengatur opsi pengkompilasi ini secara terprogram
- Lihat FavorSizeOrSpeed.
Baca juga
Opsi /O (Optimalkan kode)
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk