Sprawdzam czyjś kod C ++ dla naszego projektu, który używa MPI do obliczeń o wysokiej wydajności (10 ^ 5 - 10 ^ 6 rdzeni). Kod ma umożliwić komunikację między (potencjalnie) różnymi maszynami na różnych architekturach. Napisał komentarz, który mówi coś w rodzaju:
Zwykle używamy
new
idelete
, ale tutaj używammalloc
ifree
. Jest to konieczne, ponieważ niektóre kompilatory będą wypełniać dane inaczej, gdynew
są używane, co prowadzi do błędów w przesyłaniu danych między różnymi platformami. To się nie dzieje zmalloc
.
To nie pasuje do niczego, co znam z pytań standardowych new
i malloc
pytań.
Jaka jest różnica między new / delete i malloc / free? podpowiada, że kompilator może inaczej obliczyć rozmiar obiektu (ale dlaczego różni się to od używania sizeof
?).
malloc i umieszczenie nowe kontra nowe to dość popularne pytanie, ale mówi tylko o new
używaniu konstruktorów tam, gdzie malloc
nie, co nie ma tu znaczenia.
jak Malloc rozumie wyrównanie? mówi, że pamięć jest na pewno odpowiednio wyrównana z jednym new
lub z malloc
tym, co wcześniej myślałem.
Domyślam się, że jakiś czas w przeszłości błędnie zdiagnozował swój własny błąd i wydedukował to new
imalloc
podał różne ilości wypełnienia, co moim zdaniem prawdopodobnie nie jest prawdą. Ale nie mogę znaleźć odpowiedzi w Google ani w żadnym poprzednim pytaniu.
Pomóż mi, StackOverflow, jesteś moją jedyną nadzieją!
malloc
i new
, ponieważ new
w niektórych środowiskach przydziela się blok, dodaje pewne dane na początku i zwraca wskaźnik do lokalizacji tuż po tych danych. (Zgadzam się z innymi, wewnątrz bloku danych malloc
i new
muszę użyć tego samego rodzaju wypełnienia.)