Tôi đang xem lại mã C ++ của người khác cho dự án của chúng tôi sử dụng MPI để tính toán hiệu suất cao (10 ^ 5 - 10 ^ 6 lõi). Mã này nhằm cho phép liên lạc giữa (có thể) các máy khác nhau trên các kiến trúc khác nhau. Anh ấy đã viết một bình luận có nội dung như sau:
Chúng tôi thường sử dụng
new
vàdelete
, nhưng ở đây tôi đang sử dụngmalloc
vàfree
. Điều này là cần thiết vì một số trình biên dịch sẽ đệm dữ liệu khác nhau khinew
được sử dụng, dẫn đến lỗi khi truyền dữ liệu giữa các nền tảng khác nhau. Điều này không xảy ra vớimalloc
.
Điều này không phù hợp với bất cứ điều gì tôi biết từ các câu hỏi tiêu chuẩn new
so với malloc
.
Sự khác biệt giữa new / delete và malloc / free là gì? gợi ý về ý tưởng rằng trình biên dịch có thể tính toán kích thước của một đối tượng theo cách khác (nhưng tại sao điều đó lại khác với cách sử dụng sizeof
?).
malloc & position new so với new là một câu hỏi khá phổ biến nhưng chỉ nói về việc new
sử dụng các hàm tạo ở những nơi malloc
không, không liên quan đến điều này.
làm thế nào để malloc hiểu được sự liên kết? nói rằng bộ nhớ được đảm bảo được căn chỉnh đúng với một trong hai new
hoặc malloc
đó là những gì tôi đã nghĩ trước đây.
Tôi đoán là anh ấy đã chẩn đoán sai lỗi của chính mình trong quá khứ và suy ra điều đó new
và malloc
đưa ra các số lượng đệm khác nhau, điều mà tôi nghĩ có lẽ không đúng. Nhưng tôi không thể tìm thấy câu trả lời với Google hoặc trong bất kỳ câu hỏi nào trước đây.
Giúp tôi, StackOverflow, bạn là hy vọng duy nhất của tôi!
malloc
và new
, như new
trong một số môi trường phân bổ khối, thêm một số dữ liệu vào đầu và trả lại một con trỏ đến một vị trí ngay sau dữ liệu này. (Tôi đồng ý với những người khác, bên trong khối dữ liệu, malloc
và new
phải sử dụng cùng một loại đệm.)