-O3
memiliki beberapa kelemahan:
- Pertama-tama sering menghasilkan kode lebih lambat dari
-O2
atau-Os
. Kadang-kadang menghasilkan kode yang lebih panjang karena loop unrolling yang mungkin sebenarnya lebih lambat karena kinerja cache kode yang lebih buruk. - Seperti yang dikatakan terkadang menghasilkan kode yang salah. Mungkin karena kesalahan dalam optimalisasi atau kesalahan dalam kode (seperti mengabaikan alias ketat). Karena kode kernel terkadang dan terkadang harus 'pintar', menurut saya mungkin beberapa pengembang kernel membuat beberapa kesalahan. Saya mengalami berbagai masalah aneh, seperti crash utilitas userspace, ketika saya mengkompilasi kernel dengan gcc 4.5 yang pada saat itu sudah stabil. Saya masih menggunakan gcc 4.4 untuk kernel dan beberapa utilitas userspace yang dipilih karena berbagai bug. Hal yang sama berlaku untuk
-O3
. - Menurut saya ini tidak menawarkan banyak manfaat bagi kernel Linux. Kernel tidak melakukan komputasi yang berat dan di beberapa tempat, kernel dioptimalkan dengan perakitan.
-O3
bendera akan tidak mengubah biaya pengalihan konteks atau kecepatan I/O. Menurut saya, hal seperti <0,1% percepatan kinerja keseluruhan tidak sepadan.
Ini digunakan di Gentoo, dan saya tidak menemukan sesuatu yang aneh.
Perhatikan bahwa sebagian besar rantai alat (khususnya glibc) tidak dapat dikompilasi jika Anda mengubah tingkat pengoptimalan. Sistem build disiapkan untuk mengabaikan -O preferensi Anda untuk bagian ini di sebagian besar distro yang waras.
Sederhananya, perpustakaan dasar dan fitur OS tertentu bergantung pada kode yang benar-benar melakukan apa yang dikatakannya, bukan apa yang lebih cepat dalam banyak kasus. -fgcse-after-reload khususnya (diaktifkan oleh -O3) dapat menyebabkan masalah aneh.