Я просматриваю чужой код 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
должен использовать такие же отступы.)