Ich überprüfe den C ++ - Code eines anderen für unser Projekt, das MPI für Hochleistungsrechnen verwendet (10 ^ 5 - 10 ^ 6 Kerne). Der Code soll die Kommunikation zwischen (möglicherweise) verschiedenen Maschinen auf verschiedenen Architekturen ermöglichen. Er hat einen Kommentar geschrieben, der etwas in der Art sagt:
Wir würden normalerweise
new
und verwendendelete
, aber hier verwende ichmalloc
undfree
. Dies ist erforderlich, da einige Compiler die Daten beinew
Verwendung unterschiedlich auffüllen , was zu Fehlern bei der Datenübertragung zwischen verschiedenen Plattformen führt. Das passiert nicht mitmalloc
.
Dies passt zu nichts, was ich vom Standard kenne new
vs malloc
Fragen.
Was ist der Unterschied zwischen new / delete und malloc / free?Hinweise auf die Idee, dass der Compiler die Größe eines Objekts anders berechnen könnte (aber warum unterscheidet sich das dann von der Verwendung sizeof
?).
malloc & platzierung neu gegen neu ist eine ziemlich beliebte Frage, spricht aber nur über die new
Verwendung von Konstruktoren, wo malloc
dies nicht der Fall ist, was für diese nicht relevant ist.
Wie versteht malloc die Ausrichtung? sagt, dass das Gedächtnis garantiert richtig ausgerichtet ist mit entweder new
oder malloc
was ich vorher gedacht hatte.
Ich vermute, dass er irgendwann in der Vergangenheit seinen eigenen Fehler falsch diagnostiziert und daraus abgeleitet hat new
und malloc
unterschiedliche Mengen an Polsterung gegeben hat, was meiner Meinung nach wahrscheinlich nicht stimmt. Aber ich kann die Antwort bei Google oder in einer früheren Frage nicht finden.
Hilf mir, StackOverflow, du bist meine einzige Hoffnung!
malloc
und new
, wie new
in einigen Umgebungen, einen Block zuweisen, einige Daten am Anfang hinzufügen und einen Zeiger auf eine Position direkt nach diesen Daten zurückgeben. (Ich stimme den anderen innerhalb des Datenblocks zu malloc
und new
muss dieselbe Art von Polsterung verwenden.)