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
new
etdelete
, mais ici, j'utilisemalloc
etfree
. Cela est nécessaire car certains compilateurs rempliront les données différemment lorsqu'ilsnew
sont 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 new
rapport aux malloc
questions.
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' new
utilisation de constructeurs là où ce malloc
n'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 new
ou l' autre ou malloc
ce que je pensais auparavant.
Je suppose qu'il a mal diagnostiqué son propre bug quelque temps dans le passé et en a déduit new
et a malloc
donné 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!
malloc
et new
, comme new
dans 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, malloc
et je new
dois utiliser le même type de rembourrage.)