คำถามติดแท็ก inline-functions

14
ประโยชน์ของฟังก์ชั่นอินไลน์ใน C ++?
ข้อดี / ข้อเสียของการใช้ฟังก์ชั่นอินไลน์ใน C ++ คืออะไร ฉันเห็นว่ามันเพิ่มประสิทธิภาพสำหรับโค้ดที่คอมไพเลอร์ส่งออกเท่านั้น แต่ด้วยคอมไพเลอร์ที่ได้รับการปรับปรุงในปัจจุบัน, ซีพียูเร็ว, หน่วยความจำขนาดใหญ่ ฯลฯ (ไม่เหมือนกับในปี 1980 <ที่หน่วยความจำขาดแคลนมาก วันนี้พวกเขามีข้อดีอย่างไร

5
ควรใช้ฟังก์ชันอินไลน์ใน Kotlin เมื่อใด
ฉันรู้ว่าฟังก์ชันอินไลน์อาจจะปรับปรุงประสิทธิภาพและทำให้โค้ดที่สร้างขึ้นเติบโตขึ้น แต่ฉันไม่แน่ใจว่าเมื่อไหร่ที่จะใช้มันถูกต้อง lock(l) { foo() } แทนที่จะสร้างอ็อบเจ็กต์ฟังก์ชันสำหรับพารามิเตอร์และสร้างการเรียกคอมไพเลอร์สามารถส่งโค้ดต่อไปนี้ ( ที่มา ) l.lock() try { foo() } finally { l.unlock() } แต่ฉันพบว่าไม่มีฟังก์ชันอ็อบเจ็กต์ที่สร้างโดย kotlin สำหรับฟังก์ชันที่ไม่ใช่อินไลน์ ทำไม? /**non-inline function**/ fun lock(lock: Lock, block: () -> Unit) { lock.lock(); try { block(); } finally { lock.unlock(); } }

6
extern inline ทำอะไร?
ฉันเข้าใจว่าinlineโดยตัวมันเองเป็นข้อเสนอแนะของคอมไพเลอร์และตามดุลยพินิจของมันอาจหรือไม่อาจอินไลน์ฟังก์ชันและมันจะสร้างรหัสออบเจ็กต์ที่เชื่อมโยงได้ด้วย ฉันคิดว่าstatic inlineมันเหมือนกัน (อาจหรืออาจไม่อินไลน์ก็ได้) แต่จะไม่สร้างโค้ดออบเจ็กต์ที่เชื่อมโยงได้เมื่ออินไลน์ (เนื่องจากไม่มีโมดูลอื่นที่สามารถเชื่อมโยงไปได้) สถานที่ที่ไม่extern inlineเหมาะสมลงในภาพหรือไม่ สมมติว่าฉันต้องการแทนที่มาโครตัวประมวลผลล่วงหน้าด้วยฟังก์ชันอินไลน์และต้องการให้ฟังก์ชันนี้อินไลน์ (เช่นเนื่องจากใช้มาโคร__FILE__และ__LINE__มาโครที่ควรแก้ไขสำหรับผู้เรียก แต่ไม่ใช่ฟังก์ชันที่เรียกว่านี้) นั่นคือฉันต้องการเห็นข้อผิดพลาดของคอมไพเลอร์หรือตัวเชื่อมโยงในกรณีที่ฟังก์ชันไม่ได้รับการอินไลน์ ไม่extern inlineทำเช่นนี้? (ฉันคิดว่าถ้าไม่เป็นเช่นนั้นจะไม่มีวิธีใดที่จะบรรลุพฤติกรรมนี้นอกจากการยึดติดกับมาโคร) มีความแตกต่างระหว่าง C ++ และ C หรือไม่? มีความแตกต่างระหว่างผู้จำหน่ายคอมไพเลอร์และเวอร์ชันต่างๆหรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.