Я переглядаю чужий код C ++ для нашого проекту, який використовує MPI для високопродуктивних обчислень (10 ^ 5 - 10 ^ 6 ядер). Код призначений для забезпечення зв'язку між (потенційно) різними машинами в різних архітектурах. Він написав коментар, який щось говорить:
Ми зазвичай використовуємо
new
іdelete
, але тут я використовуюmalloc
іfree
. Це необхідно, тому що деякі компілятори будуть використовувати дані по-різному приnew
використанні, що призводить до помилок при передачі даних між різними платформами. Цього не відбуваєтьсяmalloc
.
Це не відповідає нічого, що я знаю зі стандартних запитань new
проти malloc
.
Яка різниця між новим / видаленням та malloc / free? натякає на ідею, що компілятор міг обчислити розмір об'єкта по-різному (але тоді, чому це відрізняється від використання sizeof
?).
malloc & розташування new vs. new - досить популярне питання, але говорить лише про new
використання конструкторів, де malloc
немає, що для цього не стосується.
як malloc розуміє вирівнювання? говорить про те, що пам'ять гарантовано належним чином узгоджена з будь-якою new
або про malloc
це я вважав раніше.
Я здогадуюсь, що він неправильно діагностував власну помилку в минулому і виводив це new
і malloc
давав різні кількості прокладки, що, напевно, я думаю, що це неправда. Але я не можу знайти відповіді в Google або в жодному попередньому запитанні.
Допоможи мені, StackOverflow, ти єдина моя надія!
malloc
і new
, як new
в деяких середовищах виділяти блок, додає деякі дані на початок і повертає вказівник на місце одразу після цих даних. (Я погоджуюся з іншими, всередині блоку даних, malloc
і new
повинен використовувати той самий вид прокладки.)