Estou revisando o código C ++ de outra pessoa para nosso projeto que usa MPI para computação de alto desempenho (10 ^ 5 - 10 ^ 6 núcleos). O código se destina a permitir a comunicação entre (potencialmente) diferentes máquinas em diferentes arquiteturas. Ele escreveu um comentário que diz algo como:
Normalmente usaríamos
new
edelete
, mas aqui estou usandomalloc
efree
. Isso é necessário porque alguns compiladores preencherão os dados de maneira diferente quandonew
forem usados, levando a erros na transferência de dados entre plataformas diferentes. Isso não acontece commalloc
.
Isso não se encaixa com nada que eu conheço de perguntas padrão new
vs.malloc
Qual é a diferença entre new / delete e malloc / free? sugere a ideia de que o compilador poderia calcular o tamanho de um objeto de maneira diferente (mas então por que isso difere de usar sizeof
?).
malloc & placement new vs. new é uma questão bastante popular, mas só fala sobre o new
uso de construtores onde malloc
não, o que não é relevante para isso.
como o malloc entende o alinhamento? diz que a memória tem garantia de estar devidamente alinhada com um new
ou com o malloc
que eu pensava anteriormente.
Meu palpite é que ele diagnosticou erroneamente seu próprio bug algum tempo no passado e deduziu isso new
e malloc
deu diferentes quantidades de preenchimento, o que eu acho que provavelmente não é verdade. Mas não consigo encontrar a resposta no Google ou em nenhuma pergunta anterior.
Ajude-me, StackOverflow, você é minha única esperança!
malloc
e new
, como new
em alguns ambientes alocar um bloco, adiciona alguns dados ao início e retorna um ponteiro para um local logo após esses dados. (Concordo com os outros, dentro do bloco de dados, malloc
e new
devo usar o mesmo tipo de preenchimento.)