Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Analisis pengurusan memori parameter lalai dan parameter pembolehubah fungsi C++

Analisis pengurusan memori parameter lalai dan parameter pembolehubah fungsi C++

PHPz
PHPzasal
2024-04-19 21:30:02451semak imbas

Pengurusan memori parameter lalai dan parameter berubah: Parameter lalai: Peruntukkan memori dalam bingkai tindanan fungsi, dan saiz ialah bilangan bait jenisnya. Parameter pembolehubah: Peruntukkan memori pada penghujung bingkai tindanan, saiz ditentukan oleh bilangan parameter pembolehubah: sizeof(void) (bilangan parameter lulus + 1)

C++ 函数默认参数和可变参数的内存管理剖析

Parameter lalai fungsi C++ dan analisis pengurusan memori bagi parameter berubah

Mekanisme lulus parameter fungsi dalam C++ melibatkan penyalinan nilai atau rujukan, yang menjejaskan pengurusan memori. Artikel ini akan memberikan analisis mendalam tentang tingkah laku pengurusan memori bagi parameter lalai dan parameter pembolehubah.

Parameter lalai

Parameter lalai ditentukan apabila fungsi ditakrifkan dan digunakan untuk memberikan nilai lalai apabila tiada parameter sebenar diluluskan. Mereka dikembangkan pada masa penyusunan dan peruntukan memori mereka berlaku dalam bingkai tindanan fungsi. Contohnya:

void myFunction(int x = 10);

Apabila fungsi dipanggil, jika parameter x tidak diluluskan, nilai lalai 10 digunakan. Saiz peruntukan memori parameter lalai ialah saiz jenisnya. x 参数,则使用默认值 10。默认参数的内存分配大小为其类型的大小。

可变参数

可变参数允许函数接受不定数量的参数。它们使用 ... 表示,位于参数列表的末尾。可变参数在运行时展开,其内存分配发生在堆栈帧的尾部。例如:

void myFunction(int x, ...);

在处理可变参数时,函数会创建一个可变参数列表对象,该对象存储指向实际参数内存地址的指针数组。可变参数对象的内存分配大小为 sizeof(void *) * (传入参数数量 + 1)

Parameter variadik

Parameter variadik membenarkan fungsi menerima bilangan parameter yang berubah-ubah. Mereka diwakili menggunakan ... dan terletak di hujung senarai parameter. Argumen pembolehubah tidak disambungkan pada masa jalan dan peruntukan memorinya berlaku pada penghujung bingkai tindanan. Contohnya:

#include <iostream>

void withDefault(int x = 10) {
    std::cout << "x in 'withDefault' is: " << x << std::endl;
}

void withEllipsis(int x, ...) {
    std::va_list args;
    va_start(args, x);
    
    int sum = x;
    int arg;
    while (va_arg(args, int) != NULL) { // 获取可变参数并累加
        arg = va_arg(args, int);
        sum += arg;
    }
    
    va_end(args);
    std::cout << "Sum of all arguments in 'withEllipsis' is: " << sum << std::endl;
}

int main() {
    withDefault();
    withEllipsis(1, 2, 3, 4, 5, NULL);
    return 0;
}

Apabila berurusan dengan argumen variadic, fungsi mencipta objek senarai argumen variadic yang menyimpan tatasusunan penunjuk ke alamat memori argumen sebenar. Saiz peruntukan memori objek parameter berubah ialah sizeof(void *) * (bilangan parameter lulus + 1). 🎜🎜Contoh berikut menunjukkan tingkah laku pengurusan memori parameter lalai dan parameter variadik: 🎜
x in 'withDefault' is: 10
Sum of all arguments in 'withEllipsis' is: 15
🎜Output: 🎜rrreee

Atas ialah kandungan terperinci Analisis pengurusan memori parameter lalai dan parameter pembolehubah fungsi C++. 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