Я просматриваю чужой код C ++ для нашего проекта, который использует MPI для высокопроизводительных вычислений (10 ^ 5 - 10 ^ 6 ядер). Код предназначен для обеспечения связи между (потенциально) разными машинами на разных архитектурах. Он написал комментарий, в котором говорится примерно следующее:
Обычно мы использовали бы
newиdelete, но здесь я используюmallocиfree. Это необходимо, потому что некоторые компиляторы по-разному дополняют данные приnewиспользовании, что приводит к ошибкам при передаче данных между разными платформами. Этого не происходит сmalloc.
Это не вписывается ни с чем я знаю от стандартных newпротив mallocвопросов.
В чем разница между new / delete и malloc / free? намекает на идею, что компилятор может вычислять размер объекта по-другому (но тогда почему это отличается от использования sizeof?).
malloc и размещение new vs. new - довольно популярный вопрос, но он говорит только об newиспользовании конструкторов там, где mallocнет, что не имеет отношения к этому.
как malloc понимает выравнивание? говорит, что память гарантированно будет правильно выровнена с любым newили, mallocкак я раньше думал.
Я предполагаю, что когда-то в прошлом он неправильно диагностировал свою собственную ошибку, вывел ее newи mallocдал разное количество отступов, что, по-моему, вероятно, неверно. Но я не могу найти ответ ни в Google, ни в каком-либо предыдущем вопросе.
Помогите мне, StackOverflow, ты моя единственная надежда!
mallocи new, поскольку newв некоторых средах выделяют блок, добавляют некоторые данные в начало и возвращают указатель на местоположение сразу после этих данных. (Я согласен с другими, внутри блока данных mallocи newдолжен использовать такие же отступы.)