Pembukaan untuk orang pengoptimal mikro
Ingat:
"Programer menghabiskan banyak waktu memikirkan, atau mengkhawatirkan, kecepatan bagian nonkritis dari program mereka, dan upaya efisiensi ini sebenarnya memiliki dampak negatif yang kuat ketika debugging dan pemeliharaan dipertimbangkan. Kita harus melupakan efisiensi kecil, katakan tentang 97% dari waktu: optimasi prematur adalah akar dari semua kejahatan. Namun kita tidak boleh melewatkan peluang kita dalam 3% kritis itu ".
(Berkat metamorfosis untuk kutipan lengkapnya)
Jangan gunakan array C alih-alih vektor (atau apa pun) hanya karena Anda percaya itu lebih cepat karena seharusnya tingkat yang lebih rendah. Kamu akan salah
Gunakan dengan vektor default (atau wadah aman disesuaikan dengan kebutuhan Anda), dan kemudian jika profiler Anda mengatakan itu adalah masalah, lihat apakah Anda dapat mengoptimalkannya, baik dengan menggunakan algoritma yang lebih baik, atau mengubah wadah.
Ini mengatakan, kita bisa kembali ke pertanyaan semula.
Statis / Array Dinamis?
Kelas array C ++ berperilaku lebih baik daripada array C tingkat rendah karena mereka tahu banyak tentang diri mereka sendiri, dan dapat menjawab pertanyaan array C tidak bisa. Mereka mampu membersihkan diri mereka sendiri. Dan yang lebih penting, mereka biasanya ditulis menggunakan templat dan / atau inlining, yang berarti bahwa apa yang tampak pada banyak kode dalam debug memutuskan untuk sedikit atau tidak ada kode yang diproduksi dalam rilis rilis, yang berarti tidak ada perbedaan dengan persaingan bawaan yang kurang aman.
Secara keseluruhan, itu jatuh pada dua kategori:
Array dinamis
Menggunakan pointer ke malloc-ed / new-ed array akan lebih baik secepat versi std :: vector, dan jauh lebih tidak aman (lihat posting litb ).
Jadi gunakan std :: vector.
Array statis
Menggunakan array statis adalah yang terbaik:
Jadi gunakan std :: array .
Memori tidak diinisialisasi
Kadang-kadang, menggunakan vector
alih - alih buffer mentah menimbulkan biaya yang terlihat karena vector
akan menginisialisasi buffer pada konstruksi, sedangkan kode yang diganti tidak, seperti dikatakan bernie dalam jawabannya .
Jika ini masalahnya, maka Anda bisa menanganinya dengan menggunakan unique_ptr
alih - alih vector
atau, jika kasing itu tidak luar biasa dalam codeline Anda, sebenarnya tulislah kelas buffer_owner
yang akan memiliki memori itu, dan memberi Anda akses yang mudah dan aman ke sana, termasuk bonus seperti mengubah ukurannya (menggunakan realloc
?), atau apa pun yang Anda butuhkan.