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
new
edelete
, ma qui sto usandomalloc
efree
. Ciò è necessario perché alcuni compilatori riempiranno i dati in modo diverso quandonew
vengono 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 new
vs.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 new
dell'uso di costruttori dove malloc
no, il che non è rilevante per questo.
come fa malloc a comprendere l'allineamento? dice che la memoria è garantita per essere correttamente allineata con new
o malloc
che è ciò che avevo pensato in precedenza.
La mia ipotesi è che abbia diagnosticato erroneamente il suo bug qualche tempo fa e lo abbia dedotto new
e abbia malloc
fornito 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!
malloc
e new
, poiché new
in 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, malloc
e new
devo usare lo stesso tipo di imbottitura.)