Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Fungsi Maya dalam C merupakan Bottleneck Prestasi?

Adakah Fungsi Maya dalam C merupakan Bottleneck Prestasi?

Patricia Arquette
Patricia Arquetteasal
2024-11-19 08:33:02610semak imbas

Are Virtual Functions in C   a Performance Bottleneck?

Implikasi Prestasi Fungsi Maya dalam C

Anda menyatakan kebimbangan tentang kesan prestasi fungsi maya dalam reka bentuk kelas anda. Adakah ini kebimbangan yang sah, atau bolehkah ia dianggap pengoptimuman pramatang?

Untuk menjawab soalan anda, kami menjalankan ujian prestasi pada CPU PowerPC 3GHz. Kami mencipta kelas vektor 4D mudah dengan fungsi get/set. Kami menjalankan ujian dengan fungsi yang ditakrifkan sebagai panggilan fungsi sebaris, maya dan biasa.

Berikut ialah keputusan:

  • Sebaris: 8ms (0.65ns setiap panggilan)
  • Terus: 68ms (5.53ns setiap panggilan)
  • Maya: 160ms (13ns setiap panggilan)

Dalam kes ini, dengan pemasangan data dalam cache L1, panggilan fungsi maya telah kira-kira 20 kali lebih perlahan daripada panggilan dalam talian. Walau bagaimanapun, adalah penting untuk mempertimbangkan konteks perbezaan prestasi ini.

Setiap lelaran gelung ujian melibatkan 12,288 panggilan fungsi. Oleh itu, gelung maya mengambil masa 92ms lebih lama daripada gelung langsung, menghasilkan overhed tambahan hanya 7 nanosaat bagi setiap panggilan fungsi.

Berdasarkan keputusan ini, kami membuat kesimpulan bahawa:

  • Fungsi maya sememangnya lebih perlahan daripada fungsi langsung.
  • Penalti prestasi boleh diabaikan melainkan anda berhasrat untuk memanggilnya dengan sangat kerap (mengikut tertib berjuta-juta kali sesaat).

Dalam kebanyakan situasi, melainkan mengoptimumkan prestasi melampau, pertukaran yang dikaitkan dengan penggunaan fungsi maya untuk pengkapsulan dan fleksibiliti mengatasi sebarang kebimbangan prestasi yang berpotensi.

Atas ialah kandungan terperinci Adakah Fungsi Maya dalam C merupakan Bottleneck Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn