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