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
newedelete, mas aqui estou usandomallocefree. Isso é necessário porque alguns compiladores preencherão os dados de maneira diferente quandonewforem 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 newvs.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 newuso de construtores onde mallocnã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 newou com o mallocque eu pensava anteriormente.
Meu palpite é que ele diagnosticou erroneamente seu próprio bug algum tempo no passado e deduziu isso newe mallocdeu 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!
malloce new, como newem 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, malloce newdevo usar o mesmo tipo de preenchimento.)