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
newidelete, ale tutaj używammallocifree. Jest to konieczne, ponieważ niektóre kompilatory będą wypełniać dane inaczej, gdynewsą 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 newi mallocpytań.
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 newużywaniu konstruktorów tam, gdzie mallocnie, co nie ma tu znaczenia.
jak Malloc rozumie wyrównanie? mówi, że pamięć jest na pewno odpowiednio wyrównana z jednym newlub z malloctym, 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 newimalloc 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ą!
malloci new, ponieważ neww 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 malloci newmuszę użyć tego samego rodzaju wypełnienia.)