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
newund verwendendelete, aber hier verwende ichmallocundfree. Dies ist erforderlich, da einige Compiler die Daten beinewVerwendung 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 mallocFragen.
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 newVerwendung von Konstruktoren, wo mallocdies 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 newoder mallocwas ich vorher gedacht hatte.
Ich vermute, dass er irgendwann in der Vergangenheit seinen eigenen Fehler falsch diagnostiziert und daraus abgeleitet hat newund mallocunterschiedliche 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!
mallocund new, wie newin 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 mallocund newmuss dieselbe Art von Polsterung verwenden.)