Pengecualian dalam C : Mitos atau Realiti?
Adalah dipercayai secara meluas bahawa pengecualian dalam C adalah terkenal lambat. Walau bagaimanapun, adakah ini masih benar dalam konteks C 98?
Model Kos Sifar
Model pengendalian pengecualian semasa yang digunakan dalam C ialah model Kos Sifar . Model ini menangani kebimbangan yang dibangkitkan oleh Andrei Alexandrescu dengan menawarkan pendekatan yang lebih cekap.
Model Kos Sifar beroperasi pada prinsip meja sisi. Daripada menyediakan pengawal dan semakan pengecualian eksplisit, pengkompil menghasilkan jadual yang memetakan mata pengecualian yang berpotensi kepada pengendali. Ini bermakna pengecualian boleh dilemparkan tanpa dikenakan penalti prestasi semasa operasi biasa.
Kos Laluan Luar Biasa
Walau bagaimanapun, terdapat kos prestasi apabila pengecualian berlaku. Berbanding dengan strategi "jika (ralat)" tradisional, model Kos Sifar boleh menjadi 10-20 kali lebih perlahan. Kos ini berpunca daripada kesilapan cache semasa pengambilan meja sisi dan operasi RTTI untuk penentuan pengendali.
Kebolehbacaan lwn. Prestasi
Walaupun pengecualian mungkin mempunyai sedikit kesan prestasi pada laluan yang luar biasa, faedah keseluruhannya dari segi kebolehbacaan dan kemudahan pengendalian ralat harus menjadi pertimbangan utama. Kod boleh dibaca menggalakkan kebolehselenggaraan dan mengurangkan risiko pepijat.
Amalan Pengendalian Luar Biasa
Pengecualian harus digunakan apabila pemanggil tidak dapat atau tidak mahu menangani ralat secara setempat. Dalam keadaan ini, pengecualian membenarkan ralat disebarkan ke atas timbunan panggilan, membolehkan pengendali peringkat lebih tinggi menangani isu tersebut.
Dalam kes tertentu, semakan ralat eksplisit mungkin lebih baik. Sebagai contoh, map::find tidak sepatutnya membuang tetapi sebaliknya mengembalikan checked_ptr yang mencetuskan pengecualian apabila penyahrujukan jika nilainya adalah batal. Pendekatan ini memberi kuasa kepada pemanggil untuk memilih antara semakan eksplisit dan pengendalian pengecualian.
Akhirnya, pilihan antara pengecualian dan semakan ralat eksplisit harus dipandu oleh pertimbangan reka bentuk dan konteks khusus kod.
Atas ialah kandungan terperinci Adakah Pengecualian C Benar-benar Lambat dalam C 98: Mitos atau Realiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!