Maison  >  Article  >  développement back-end  >  Analyse de la gestion mémoire des paramètres par défaut et des paramètres variables des fonctions C++

Analyse de la gestion mémoire des paramètres par défaut et des paramètres variables des fonctions C++

PHPz
PHPzoriginal
2024-04-19 21:30:02405parcourir

Gestion de la mémoire des paramètres par défaut et des paramètres variables : Paramètres par défaut : alloue de la mémoire dans le cadre de la pile de fonctions, et la taille est le nombre d'octets de son type. Paramètres variables : Allouez de la mémoire à la fin du frame de pile, la taille est déterminée par le nombre de paramètres variables : sizeof(void) (nombre de paramètres passés + 1)

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

Paramètres par défaut de la fonction C++ et analyse de la gestion de la mémoire de paramètres variables

Le mécanisme de transmission des paramètres de fonction en C++ implique la copie ou la référence de valeurs, ce qui affecte la gestion de la mémoire. Cet article fournira une analyse approfondie du comportement de gestion de la mémoire des paramètres par défaut et des paramètres variables.

Paramètres par défaut

Les paramètres par défaut sont spécifiés lorsque la fonction est définie et sont utilisés pour fournir des valeurs par défaut lorsqu'aucun paramètre réel n'est transmis. Ils sont étendus au moment de la compilation et leur allocation de mémoire s'effectue dans le cadre de la pile de fonctions. Par exemple :

void myFunction(int x = 10);

Lorsque la fonction est appelée, si le paramètre x n'est pas passé, la valeur par défaut 10 est utilisée. La taille d'allocation de mémoire du paramètre par défaut est la taille de son type. x 参数,则使用默认值 10。默认参数的内存分配大小为其类型的大小。

可变参数

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

void myFunction(int x, ...);

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

Paramètres variadiques

Les paramètres variadiques permettent à une fonction d'accepter un nombre variable de paramètres. Ils sont représentés par ... et se situent à la fin de la liste des paramètres. Les arguments des variables sont déroulés au moment de l'exécution et leur allocation de mémoire a lieu à la fin du cadre de pile. Par exemple :

#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;
}

Lorsqu'il s'agit d'arguments variadiques, la fonction crée un objet liste d'arguments variadiques qui stocke un tableau de pointeurs vers les adresses mémoire des arguments réels. La taille d'allocation de mémoire de l'objet paramètre variable est sizeof(void *) * (nombre de paramètres passés + 1). 🎜🎜L'exemple suivant montre le comportement de gestion de la mémoire des paramètres par défaut et des paramètres variadiques : 🎜
x in 'withDefault' is: 10
Sum of all arguments in 'withEllipsis' is: 15
🎜Sortie : 🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn