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
newydelete, pero aquí estoy usandomallocyfree. Esto es necesario porque algunos compiladores rellenarán los datos de manera diferente cuandonewse 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 newfrente a las mallocpreguntas.
¿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 newuso de constructores donde mallocno 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 newo mallocque es lo que pensaba anteriormente.
Supongo que diagnosticó erróneamente su propio error en el pasado y lo dedujo newy le mallocdio 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!
mallocy new, como newen 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, mallocy newdebo usar el mismo tipo de relleno).