Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengurusan memori panggilan fungsi C++: overhed memori bagi nilai lulus dan pulangan parameter

Pengurusan memori panggilan fungsi C++: overhed memori bagi nilai lulus dan pulangan parameter

王林
王林asal
2024-04-30 18:12:01272semak imbas

Panggilan fungsi C++ melibatkan nilai lulus dan pulangan parameter, yang akan menjana overhed memori. Lulus parameter adalah mengikut nilai atau rujukan, lulus dengan nilai menyalin parameter, dan lulus melalui titik rujukan kepada parameter asal. Nilai pulangan dikembalikan mengikut nilai atau rujukan, pulangan mengikut nilai menyimpan nilai pulangan, dan kembali melalui titik rujukan kepada nilai asal. Rujukan lalu dan pulangan secara amnya mempunyai overhed memori yang kurang kerana mereka tidak membuat salinan.

C++ 函数调用内存管理:参数传递与返回值的内存开销

Pengurusan memori panggilan fungsi C++: overhed memori bagi lulus parameter dan nilai pulangan

Dalam atur cara C++, panggilan fungsi melibatkan nilai lulus dan pulangan parameter, yang akan menjana overhed memori. Memahami overhed memori ini adalah penting untuk mengoptimumkan prestasi program.

Parameter passing

C++ menyokong passing by value dan passing by reference. Melepasi nilai membuat salinan parameter, manakala lulus melalui rujukan tidak.

  • Nilai lulus: Salinan hujah dicipta apabila fungsi dipanggil. Salinan ini disimpan pada timbunan dan dimusnahkan selepas fungsi kembali. Overhed memori adalah sama dengan saiz parameter.

    void fn(int x) {
    // x 是参数副本
    }
  • Lulus rujukan: Rujukan kepada parameter dicipta apabila fungsi dipanggil. Rujukan menunjuk kepada parameter asal, jadi tiada salinan dibuat. Overhed memori ialah saiz penunjuk atau rujukan, yang biasanya jauh lebih kecil daripada saiz hujah.

    void fn(int& x) {
    // x 是参数引用
    }

Nilai pulangan

Fungsi boleh mengembalikan nilai atau rujukan. Overhed memori bagi nilai pulangan bergantung pada jenisnya.

  • Pulangan mengikut nilai: Nilai pulangan disimpan pada tindanan dan dimusnahkan selepas fungsi dipanggil. Overhed memori adalah sama dengan saiz nilai pulangan.

    int fn() {
    return 5; // 返回一个整型值
    }
  • Kembalikan melalui rujukan: Nilai pulangan menghala ke nilai asal, jadi tiada salinan dibuat. Overhed memori ialah saiz penunjuk atau rujukan.

    int& fn() {
    static int x = 5;
    return x; // 返回 x 的引用
    }

Kes praktikal

Pertimbangkan kod berikut:

#include <iostream>

void print(int n) { // 按值传递
  std::cout << n << std::endl;
}

void printRef(int& n) { // 按引用传递
  std::cout << n << std::endl;
}

int main() {
  int x = 5;
  print(x); // 按值传递
  printRef(x); // 按引用传递

  return 0;
}
  • print(x) Apabila dipanggil, salinan parameter x dihantar ke fungsinya, overhed memori ialah sizeof(int). print(x) 调用时,参数 x 的副本传递给函数,内存开销为 sizeof(int)
  • printRef(x) 调用时,参数 x 的引用传递给函数,内存开销为 sizeof(int*)
  • Apabila printRef(x) dipanggil, rujukan parameter x dihantar ke fungsi dan overhed memori ialah sizeof(int*) kod> (iaitu, saiz penunjuk ).

Dalam praktiknya, rujukan lulus sering digunakan untuk melepasi objek besar untuk mengelakkan operasi penyalinan yang mahal. 🎜

Atas ialah kandungan terperinci Pengurusan memori panggilan fungsi C++: overhed memori bagi nilai lulus dan pulangan parameter. 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