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.
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; }
x
dihantar ke fungsinya, overhed memori ialah sizeof(int)
. print(x)
调用时,参数 x
的副本传递给函数,内存开销为 sizeof(int)
。printRef(x)
调用时,参数 x
的引用传递给函数,内存开销为 sizeof(int*)
printRef(x)
dipanggil, rujukan parameter x
dihantar ke fungsi dan overhed memori ialah sizeof(int*) kod> (iaitu, saiz penunjuk ).
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!