Recommandé, 2020

Choix De L'Éditeur

Différence entre new et malloc ()

New et malloc () sont toutes deux utilisées pour allouer dynamiquement la mémoire. Bien que new et malloc () soient différents dans de nombreux contextes. La principale différence entre new et malloc () est que new est l'opérateur utilisé comme construction. Par ailleurs, malloc () est une fonction de bibliothèque standard, utilisée pour allouer de la mémoire lors de l'exécution. Les autres différences entre elles sont discutées ci-dessous dans le tableau de comparaison:

Tableau de comparaison

Base de comparaisonNouveaumalloc ()
La langueL'opérateur new est une fonctionnalité spécifique de C ++, Java et C #.La fonction malloc () est une caractéristique de C.
La nature"nouveau" est un opérateur.malloc () est une fonction.
taille de( )nouveau n'a pas besoin de l'opérateur sizeof car il alloue assez de mémoire pour un type spécifiqueMalloc a besoin de l'opérateur sizeof pour savoir quelle taille de mémoire il doit allouer.
ConstructeurL'opérateur new peut appeler le constructeur d'un objet.malloc () ne peut pas du tout appeler un constructeur.
InitialisationL'opérateur new pourrait initialiser un objet en lui allouant de la mémoire.L'initialisation de la mémoire n'a pas pu être effectuée dans malloc.
SurchargeL'opérateur new peut être surchargé.Le malloc () ne peut jamais être surchargé.
ÉchecEn cas d'échec, l'opérateur new lève une exception.En cas d'échec, malloc () renvoie NULL.
DeallocationL'allocation de mémoire par new, libérée en utilisant "delete".L'allocation de mémoire par malloc () est libérée à l'aide d'une fonction free ().
RéallocationLe nouvel opérateur ne réaffecte pas la mémoire.La mémoire allouée par malloc () peut être réaffectée à l'aide de realloc ().
ExécutionL'opérateur new réduit le temps d'exécution.Le malloc () nécessite plus de temps pour l'exécution.

Définition de nouveau

L'opérateur new est un opérateur d'allocation de mémoire qui alloue de la mémoire de manière dynamique. L'opérateur new alloue de la mémoire dans le segment de mémoire et renvoie l'adresse de départ de la mémoire affectée à une variable de référence. Le nouvel opérateur est similaire à malloc () en C. Cependant, le compilateur C ++ est compatible avec malloc (), mais il est préférable d’utiliser un nouvel opérateur car il présente certains avantages par rapport à malloc (). La syntaxe de new operator est la suivante:

 type nom_variable = nouveau type (liste_paramètres); 

Ici, «type» désigne le type de données de la variable pour laquelle la mémoire doit être allouée. Le mot "nom_variable" est le nom donné à la variable de référence qui contient le pointeur sur la mémoire. La parenthèse spécifie ici l’appel du constructeur. Liste_paramètres correspond à la liste des valeurs transmises au constructeur pour initialiser le nouvel objet construit.

Le nouvel opérateur alloue suffisamment de mémoire pour un objet d'un type spécifique. Par conséquent, il ne nécessite pas d'opérateur sizeof () ni de redimensionner la mémoire, comme malloc () qui utilise realloc () pour réaffecter la mémoire. Le nouvel opérateur est une construction. il appelle le constructeur d'un objet while declaration qui est généralement utilisé pour initialiser l'objet.

Nous savons que le nouvel opérateur alloue la mémoire dans le tas et que la taille du tas est limitée. Ainsi, si le segment de mémoire manque de mémoire et qu'un nouvel opérateur tente d'allouer de la mémoire, le nouvel opérateur en échec. Si le nouvel opérateur n'alloue pas la mémoire, il lève une exception. Si votre code ne parvient pas à gérer cette exception, le programme se termine de manière anormale.

La mémoire allouée par l'opérateur new peut être libérée à l'aide de l'opérateur delete. Le nouvel opérateur coupe le temps d'exécution car il s'agit d'un opérateur et non d'une fonction.

Définition de malloc ()

Malloc () est une fonction utilisée pour allouer la quantité de mémoire demandée sur le tas. La méthode renvoie le pointeur de type 'void' qui est en outre, de type cast pour obtenir un pointeur sur une mémoire d'un type spécifié et ce pointeur vers mémoire est affecté à une variable de référence. La fonction malloc () est similaire au nouvel opérateur en C ++ car elle est utilisée pour allouer de la mémoire de manière dynamique. Malloc () est une fonction de bibliothèque standard. La syntaxe de la fonction malloc () est la suivante:

 type nom_variable = (type *) malloc (sizeof (type)); 

Ici, “type” indique le type de données de la variable pour laquelle de la mémoire doit être allouée. Nom_variable est le nom de la variable de référence à laquelle le pointeur renvoyé par malloc () sera affecté. Le (type *) décrit la conversion de type pour obtenir un pointeur sur la mémoire dans un type spécifique. Le sizeof () décrit malloc (), quelle est la taille de la mémoire requise.

Malloc () requiert la transtypage, car le pointeur renvoyé par malloc () est de type void. Par conséquent, pour affecter un type au pointeur, la transtypage est requise. La valeur sizeof () est requise car la fonction malloc () alloue une mémoire brute. Par conséquent, il est nécessaire d'indiquer à la fonction malloc () quelle est la taille de la mémoire à allouer. Si la mémoire allouée n'est pas suffisante, vous pouvez la redimensionner ou la réaffecter à l'aide de realloc ().

La fonction malloc () alloue de la mémoire sur le tas. Si la mémoire est saturée, la fonction malloc () renvoie un pointeur NULL. Par conséquent, la variable de référence contenant le pointeur renvoyé par malloc () doit être vérifiée avant son utilisation, sinon cela pourrait entraîner un blocage du système.

La mémoire allouée par la fonction malloc () est libérée à l'aide de free (). Comme l'appel de fonction entraîne une surcharge, malloc () nécessite plus de temps d'exécution.

Principales différences entre new et malloc ()

  1. Le nouvel opérateur est une construction introduite en C ++ et utilisée en Java, C #, etc. D'autre part, malloc () est une fonction de bibliothèque standard trouvée uniquement en langage C et prise en charge par C ++.
  2. L'opérateur new alloue suffisamment de mémoire pour l'objet du type spécifié. Il n'a donc pas besoin d'opérateur de dimensionnement. D'autre part, la fonction malloc () a besoin de l'opérateur sizeof () pour l'informer de la taille de la mémoire à allouer.
  3. L'opérateur new peut appeler le constructeur de l'objet while declaration. D'autre part, la fonction malloc () ne peut pas appeler le constructeur.
  4. L'opérateur 'new' peut être surchargé, mais malloc () ne le peut pas.
  5. Si le nouvel opérateur n'alloue pas la mémoire, il lève une exception qui doit être gérée par le code sinon le programme se terminera. Par ailleurs, la fonction malloc () renvoie un pointeur NULL si la mémoire n’est pas allouée. Si le pointeur est utilisé sans le vérifier, cela provoquera un crash du système.
  6. La mémoire allouée à l'aide d'un nouvel opérateur peut être désallouée à l'aide de 'delete'. D'autre part, la mémoire allouée à l'aide de la fonction malloc () peut être désallouée à l'aide de free ().
  7. Une fois que la mémoire est allouée à l'aide d'un nouvel opérateur, elle ne peut plus être redimensionnée. D'autre part, la mémoire allouée à l'aide de la fonction malloc () peut être réallouée (redimensionnée) à l'aide de la fonction realloc ().
  8. Le temps d'exécution de new est inférieur à celui de malloc () car malloc est une fonction et new est une construction.

Conclusion:

La fonction malloc () est l'ancienne méthode d'allocation dynamique de la mémoire. De nos jours, le nouvel opérateur est utilisé pour allouer la mémoire au moment de l'exécution, car il présente certains avantages par rapport à malloc ().

Top