Sto esaminando il codice C ++ di qualcun altro per il nostro progetto che utilizza MPI per il calcolo ad alte prestazioni (10 ^ 5 - 10 ^ 6 core). Il codice ha lo scopo di consentire comunicazioni tra macchine (potenzialmente) differenti su architetture differenti. Ha scritto un commento che dice qualcosa sulla falsariga di:
Normalmente useremmo
newedelete, ma qui sto usandomallocefree. Ciò è necessario perché alcuni compilatori riempiranno i dati in modo diverso quandonewvengono utilizzati, causando errori nel trasferimento dei dati tra piattaforme diverse. Questo non accade conmalloc.
Questo non si adatta a tutto ciò che so da domande standard newvs.malloc
Qual è la differenza tra new / delete e malloc / free? suggerisce l'idea che il compilatore possa calcolare la dimensione di un oggetto in modo diverso (ma allora perché differisce dall'uso sizeof?).
malloc e posizionamento nuovo contro nuovo è una domanda abbastanza popolare, ma parla solo newdell'uso di costruttori dove mallocno, il che non è rilevante per questo.
come fa malloc a comprendere l'allineamento? dice che la memoria è garantita per essere correttamente allineata con newo mallocche è ciò che avevo pensato in precedenza.
La mia ipotesi è che abbia diagnosticato erroneamente il suo bug qualche tempo fa e lo abbia dedotto newe abbia mallocfornito diverse quantità di imbottitura, che penso probabilmente non sia vero. Ma non riesco a trovare la risposta con Google o in nessuna domanda precedente.
Aiutami, StackOverflow, sei la mia unica speranza!
malloce new, poiché newin alcuni ambienti alloca un blocco, aggiunge alcuni dati all'inizio e restituisce un puntatore a una posizione subito dopo questi dati. (Sono d'accordo con gli altri, all'interno del blocco dati, malloce newdevo usare lo stesso tipo di imbottitura.)