7
votes

En ce qui concerne les différences entre MALLOC et nouveau en termes de mécanismes respectifs de la manipulation d'une répartition de la mémoire?

Quelles sont les différences entre MALLOC et NOUVEAU en termes de mécanismes respectifs d'allocation de la mémoire de traitement?


5 commentaires

MALLOC ne jette pas Bad_alloc EXEPEION comme Nouveau , comme je pense


MALLOC et GRATUIT N'appelez pas les constructeurs d'objets et les destructeurs.


Ci-dessus des commentaires ajoutés à une réponse communautaire-wiki.


Parasht.com/c++-faq-lite/freestore- mgmt.html # FAQ-16.4


S'il vous plaît voir Stackoverflow.com/Questtions/7443782/...


4 Réponses :


7
votes
  • malloc ne jette pas Bad_alloc exception sous forme Nouveau .
    • Parce que MALLOC ne jette pas d'exceptions, vous devez vérifier son résultat contre null (ou nullptr en C ++ 11 et supérieur), ce qui n'est pas nécessaire avec neuf . Toutefois, Nouveau peut être utilisé de manière à ne pas jeter les attentes, comme lorsque la fonction set_new_handler est définie
    • malloc et libres ne appelle pas les constructeurs d'objets et les destructeurs, car il n'y a pas d'objets dans C . .
    • Voir Cette question et Cet article .

3 commentaires

En outre, parce que MALLOC ne jette pas d'exceptions, vous devez vérifier son résultat contre NULL, ce qui n'est pas nécessaire avec de nouveau.


Deux autres points peuvent être ajoutés: (1) Emplacement Nouveau (2) Compatibilité du MALLOC / REALLOC .


@iammilind ok ajoutez-les en édité la réponse



2
votes

Eh bien, malloc () est une primitive de niveau plus basse. Cela vous donne simplement un pointeur pour n octets de mémoire de tas. L'opérateur C ++ nouveau est plus "intelligent" en ce sens qu'il "sait" sur le type de l'objet (s) alloué (s) et peut faire des choses comme des constructeurs d'appel pour s'assurer que les objets nouvellement alloués sont tous correctement initialisé.

implémentations de nouveau finissent souvent par appeler malloc () pour obtenir la mémoire brute, puis faire des choses sur cette mémoire pour initaliser les OBJECS construits .


0 commentaires

1
votes

Si l'appel échoue, Nouveau lancera une exception tandis que malloc retournera null . .

pour MALLOC , l'appelant doit spécifier la quantité de mémoire à attribuer, tandis que nouveau le détermine automatiquement.

Ces différences sont concernant l'attribution, il y a des tonnes d'autres - Nouveau Constructeur d'appelera, nouveau peut être surchargé, nouveau est un opérateur, tandis que MALLOC est une fonction ...


0 commentaires

2
votes

Voulez-vous dire comment ils sont mis en œuvre?

Ils peuvent être mis en œuvre comme n'importe quoi, juste MALLOC ne peut pas appeler Nouveau et toutes les normes Nouveau S doivent appeler le global opérateur nouveau (vide *) . Souvent nouveau est même implémenté comme appelant malloc mais il n'y a aucune exigence sur la manière dont cela est mis en œuvre. Il y a même des dizaines d'allocateurs là-bas, chacun avec quelques forces et certaines week-ends.

ou voulez-vous dire comment ils diffèrent sur le niveau de langue?

  • Nouveau lancers (sauf s'il est appelé avec std :: nodhow ) sur l'erreur d'allocation. Nouvelles expressions (pas l'opérateur nouveau) appelle le CTOR.
  • malloc retourne 0 sur les pannes d'allocation.

0 commentaires