Estoy revisando el código C ++ de otra persona para nuestro proyecto que usa MPI para computación de alto rendimiento (10 ^ 5 - 10 ^ 6 núcleos). El código está destinado a permitir las comunicaciones entre (potencialmente) diferentes máquinas en diferentes arquitecturas. Ha escrito un comentario que dice algo parecido a:
Normalmente usamos
new
ydelete
, pero aquí estoy usandomalloc
yfree
. Esto es necesario porque algunos compiladores rellenarán los datos de manera diferente cuandonew
se utilicen, lo que provocará errores en la transferencia de datos entre diferentes plataformas. Esto no sucede conmalloc
.
Esto no encaja con nada de lo que sé de las preguntas estándar new
frente a las malloc
preguntas.
¿Cuál es la diferencia entre new / delete y malloc / free? insinúa la idea de que el compilador podría calcular el tamaño de un objeto de manera diferente (pero entonces, ¿por qué eso difiere del uso sizeof
?).
malloc y ubicación new vs new es una pregunta bastante popular, pero solo habla sobre el new
uso de constructores donde malloc
no lo hace, lo cual no es relevante para esto.
¿Cómo entiende malloc la alineación? dice que se garantiza que la memoria se alineará correctamente con cualquiera de los dos new
o malloc
que es lo que pensaba anteriormente.
Supongo que diagnosticó erróneamente su propio error en el pasado y lo dedujo new
y le malloc
dio diferentes cantidades de relleno, lo que creo que probablemente no sea cierto. Pero no encuentro la respuesta en Google ni en ninguna pregunta anterior.
Ayúdame, StackOverflow, ¡eres mi única esperanza!
malloc
y new
, como new
en algunos entornos asignan un bloque, agrega algunos datos al principio y devuelve un puntero a una ubicación justo después de estos datos. (Estoy de acuerdo con los demás, dentro del bloque de datos, malloc
y new
debo usar el mismo tipo de relleno).