ฉันค้นหา Stack Overflow เพื่อหาข้อดี/ข้อเสียของมาโครที่มีลักษณะคล้ายฟังก์ชันกับฟังก์ชันแบบอินไลน์
ฉันพบการสนทนาต่อไปนี้: ข้อดีข้อเสียของ ฟังก์ชันมาโคร/วิธีการแบบอินไลน์ที่แตกต่างกันใน C
...แต่มันไม่ได้ตอบคำถามหลักของฉัน
กล่าวคือ อะไรคือค่าใช้จ่ายในการใช้ฟังก์ชันมาโคร (พร้อมตัวแปร ซึ่งอาจมีการเรียกใช้ฟังก์ชันอื่นๆ) กับฟังก์ชันอินไลน์ ในแง่ของการใช้หน่วยความจำและความเร็วในการดำเนินการ
มีค่าใช้จ่ายที่แตกต่างกันขึ้นอยู่กับคอมไพเลอร์หรือไม่? ฉันมีทั้ง icc และ gcc ให้เลือก
ข้อมูลโค้ดของฉันที่ฉันกำลังทำให้เป็นโมดูลคือ:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = AttractiveTerm * AttractiveTerm;
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
เหตุผลของฉันในการเปลี่ยนเป็นฟังก์ชัน/มาโครแบบอินไลน์คือฉันสามารถวางมันลงในไฟล์ c แล้วคอมไพล์ฟังก์ชัน/มาโครอื่น ๆ ที่คล้ายกัน แต่มีเงื่อนไขที่แตกต่างกันเล็กน้อย
e.g.:
double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = pow(SigmaSquared/RadialDistanceSquared,9);
EnergyContribution +=
4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
(สังเกตความแตกต่างในบรรทัดที่สอง...)
ฟังก์ชันนี้เป็นส่วนสำคัญของโค้ดของฉันและถูกเรียกหลายพันครั้งต่อขั้นตอนในโปรแกรมของฉัน และโปรแกรมของฉันก็ดำเนินการหลายล้านขั้นตอน ดังนั้น ฉันต้องการให้มีค่าใช้จ่ายน้อยที่สุด เหตุใดฉันจึงเสียเวลากังวลเกี่ยวกับค่าใช้จ่ายของ inlining v. ในการแปลงโค้ดให้เป็นมาโคร
จากการสนทนาครั้งก่อน ฉันทราบถึงข้อดี/ข้อเสียอื่นๆ (ความเป็นอิสระของประเภทและข้อผิดพลาดที่ตามมา) ของมาโครแล้ว... แต่สิ่งที่ฉันอยากรู้มากที่สุดและยังไม่รู้ในขณะนี้คือประสิทธิภาพ
ฉันรู้ว่าทหารผ่านศึก C บางคนจะมีข้อมูลเชิงลึกที่ดีสำหรับฉัน!!
MACRO()
ตัวแปรในตัวแยกวิเคราะห์ที่มีการเรียกใช้ฟังก์ชันเหล่านี้บ่อยมากinline
และ__forceinline
มีการเพิ่มขึ้นเพียง 50% เทียบกับการเรียกใช้ฟังก์ชันปกติ แต่MACROs
ส่งได้ 100% (ติดตามประสิทธิภาพเป็นรอบ) - ดังนั้น หากฟังก์ชันอินไลน์สั้นและเรียบง่าย ให้ลองใช้มาโครและการวัดประสิทธิภาพ - person CodeAngry   schedule 05.04.2014