Je passe en revue le code C ++ de quelqu'un d'autre pour notre projet qui utilise MPI pour le calcul haute performance (10 ^ 5 - 10 ^ 6 cœurs). Le code est destiné à permettre des communications entre (potentiellement) différentes machines sur différentes architectures. Il a écrit un commentaire qui dit quelque chose du genre:
Nous utiliserions normalement
newetdelete, mais ici, j'utilisemallocetfree. Cela est nécessaire car certains compilateurs rempliront les données différemment lorsqu'ilsnewsont utilisés, ce qui entraîne des erreurs de transfert de données entre différentes plates-formes. Cela n'arrive pas avecmalloc.
Cela ne correspond à rien de ce que je sais des questions standard par newrapport aux mallocquestions.
Quelle est la différence entre new / delete et malloc / free? fait allusion à l'idée que le compilateur pourrait calculer la taille d'un objet différemment (mais alors pourquoi est-ce différent de l'utilisation sizeof?).
malloc & placement nouveau vs nouveau est une question assez populaire, mais ne parle que de l' newutilisation de constructeurs là où ce mallocn'est pas le cas, ce qui n'est pas pertinent pour cela.
comment malloc comprend-il l'alignement? dit que la mémoire est garantie d'être correctement alignée avec l'un newou l' autre ou mallocce que je pensais auparavant.
Je suppose qu'il a mal diagnostiqué son propre bug quelque temps dans le passé et en a déduit newet a mallocdonné différentes quantités de rembourrage, ce qui n'est probablement pas vrai. Mais je ne trouve pas la réponse avec Google ou dans aucune question précédente.
Aidez-moi, StackOverflow, vous êtes mon seul espoir!
mallocet new, comme newdans certains environnements, allouer un bloc, ajoute des données au début et renvoie un pointeur vers un emplacement juste après ces données. (Je suis d'accord avec les autres, à l'intérieur du bloc de données, mallocet je newdois utiliser le même type de rembourrage.)