Rumah >pembangunan bahagian belakang >C++ >Perbandingan prestasi fungsi sebaris C++ dalam senario yang berbeza

Perbandingan prestasi fungsi sebaris C++ dalam senario yang berbeza

WBOY
WBOYasal
2024-04-28 13:18:02618semak imbas

Fungsi sebaris mengoptimumkan prestasi dengan menghapuskan overhed panggilan fungsi: pengkompil boleh menyelaraskan fungsi ke dalam titik panggilan untuk meningkatkan kecekapan. Penanda aras menunjukkan bahawa fungsi sebaris adalah kira-kira 20% lebih pantas daripada fungsi bukan sebaris. Pengkompil mengambil kira faktor seperti saiz fungsi, kerumitan dan kekerapan panggilan apabila memutuskan sama ada untuk sebaris.

C++ 内联函数在不同场景下的性能比较

C++ perbandingan prestasi fungsi sebaris dalam senario berbeza

Fungsi sebaris ialah kod terkumpul yang menggantikan panggilan fungsi. Ia boleh meningkatkan prestasi dalam beberapa kes dengan menghapuskan overhed panggilan fungsi.

Tentukan fungsi sebaris

Dalam C++, gunakan kata kunci inline untuk mengisytiharkan fungsi sebagai sebaris:

inline int sum(int a, int b) {
  return a + b;
}

Pengoptimuman Pengkompil

Pengkompil mungkin ke fungsi titik panggilan.s dalam talian atau mungkin tidak. Berikut ialah beberapa faktor yang mungkin dipertimbangkan oleh pengkompil sebagai fungsi sebaris:

  • Saiz fungsi: Fungsi yang lebih kecil lebih berkemungkinan diselaraskan.
  • Kerumitan fungsi: Fungsi kompleks kurang berkemungkinan sebaris.
  • Kekerapan panggilan: Fungsi yang kerap dipanggil lebih berkemungkinan sebaris.

Tanda Aras

Untuk membandingkan prestasi fungsi sebaris dengan fungsi bukan sebaris, kami menjalankan penanda aras:

#include <chrono>

// 内联版本
inline int inline_sum(int a, int b) {
  return a + b;
}

// 非内联版本
int non_inline_sum(int a, int b) {
  return a + b;
}

int main() {
  // 运行时间变量
  std::chrono::time_point<std::chrono::high_resolution_clock> start, stop;

  int sum1 = 0;

  // 内联版本
  start = std::chrono::high_resolution_clock::now();
  for (int i = 0; i < 10000000; i++) {
    sum1 += inline_sum(i, i);
  }
  stop = std::chrono::high_resolution_clock::now();

  int sum2 = 0;

  // 非内联版本
  start = std::chrono::high_resolution_clock::now();
  for (int i = 0; i < 10000000; i++) {
    sum2 += non_inline_sum(i, i);
  }
  stop = std::chrono::high_resolution_clock::now();

  std::cout << "内联版本: " << std::chrono::duration_cast<std::chrono::microseconds>(stop - start).count() << " 微秒" << std::endl;
  std::cout << "非内联版本: " << std::chrono::duration_cast<std::chrono::microseconds>(stop - start).count() << " 微秒" << std::endl;

  return 0;
}

Keputusan

Pada mesin penanda aras adalah seperti

: tanda aras berikut: Versi: ~100 mikrosaat
  • Versi bukan sebaris: ~120 mikrosaat
Kesimpulan

Dalam penanda aras kami, fungsi sebaris adalah ~20% lebih pantas daripada fungsi bukan sebaris. Walau bagaimanapun, sila ambil perhatian bahawa peningkatan prestasi sebenar bergantung pada senario tertentu dan tahap pengoptimuman pengkompil.

Atas ialah kandungan terperinci Perbandingan prestasi fungsi sebaris C++ dalam senario yang berbeza. 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