ฉันกำลังตรวจสอบรหัส C ++ ของผู้อื่นสำหรับโครงการของเราที่ใช้ MPI สำหรับการประมวลผลประสิทธิภาพสูง (10 ^ 5 - 10 ^ 6 คอร์) รหัสนี้มีวัตถุประสงค์เพื่อให้สามารถสื่อสารระหว่าง (อาจ) เครื่องจักรที่แตกต่างกันในสถาปัตยกรรมที่แตกต่างกัน เขาเขียนความคิดเห็นที่กล่าวถึงบางสิ่งตามบรรทัดของ:
ปกติเราจะใช้
new
และdelete
แต่ที่นี่ผมใช้และmalloc
free
สิ่งนี้จำเป็นเนื่องจากคอมไพเลอร์บางตัวจะเพิ่มข้อมูลแตกต่างกันเมื่อnew
ใช้งานซึ่งนำไปสู่ข้อผิดพลาดในการถ่ายโอนข้อมูลระหว่างแพลตฟอร์มต่างๆmalloc
นี้ไม่ได้เกิดขึ้นกับ
สิ่งนี้ไม่เข้ากับสิ่งที่ฉันรู้จากคำถามมาตรฐานnew
เทียบกับmalloc
คำถาม
อะไรคือความแตกต่างระหว่าง new / delete และ malloc / free? บอกใบ้ถึงแนวคิดที่ว่าคอมไพเลอร์สามารถคำนวณขนาดของวัตถุได้แตกต่างกัน (แต่เหตุใดจึงแตกต่างจากการใช้sizeof
)
malloc และตำแหน่งใหม่กับใหม่เป็นคำถามที่ได้รับความนิยมพอสมควร แต่พูดถึงการnew
ใช้ตัวสร้างmalloc
เท่านั้นซึ่งไม่เกี่ยวข้องกับสิ่งนี้
malloc เข้าใจการจัดตำแหน่งอย่างไร บอกว่าหน่วยความจำได้รับการรับรองว่าจัดวางอย่างถูกต้องnew
หรือmalloc
เป็นสิ่งที่ฉันเคยคิดไว้ก่อนหน้านี้
ฉันเดาว่าเขาวินิจฉัยจุดบกพร่องของตัวเองผิดพลาดในอดีตและอนุมานได้ว่าnew
และmalloc
ให้จำนวนช่องว่างที่แตกต่างกันซึ่งฉันคิดว่าอาจไม่เป็นความจริง แต่ฉันไม่พบคำตอบใน Google หรือคำถามก่อนหน้านี้
ช่วยฉันด้วย StackOverflow คุณเป็นความหวังเดียวของฉัน!
malloc
และnew
เนื่องจากnew
ในบางสภาพแวดล้อมจัดสรรบล็อกจะเพิ่มข้อมูลบางส่วนไปยังจุดเริ่มต้นและส่งกลับตัวชี้ไปยังตำแหน่งหลังจากข้อมูลนี้ (ฉันเห็นด้วยกับคนอื่น ๆ ในบล็อกข้อมูลmalloc
และnew
ต้องใช้ช่องว่างภายในแบบเดียวกัน)