ปกติฉันเกลียดคำว่า "การปรับให้เหมาะสมก่อนวัยอันควร" แต่นี่เป็นผลของมัน เป็นที่น่าสังเกตว่า Knuth ใช้คำพูดที่โด่งดังนี้ในบริบทของการผลักดันการใช้goto
ข้อความเพื่อเร่งรหัสในพื้นที่สำคัญ นั่นคือกุญแจสำคัญ: เส้นทางที่สำคัญ
เขาแนะนำให้ใช้goto
เพื่อเร่งโค้ด แต่เตือนผู้เขียนโปรแกรมที่ต้องการทำสิ่งต่าง ๆ เหล่านี้ตามลางสังหรณ์และความเชื่อโชคลางสำหรับโค้ดที่ไม่สำคัญแม้แต่น้อย
เพื่อสนับสนุนswitch
งบมากที่สุดเท่าที่เป็นไปได้อย่างสม่ำเสมอทั่ว codebase (ไม่ว่าจะมีการจัดการภาระหนักหรือไม่ก็ตาม) เป็นตัวอย่างคลาสสิกของสิ่งที่ Knuth เรียกโปรแกรมเมอร์ "penny-wise และ pound-foolish" ที่ใช้เวลาตลอดทั้งวัน รหัสที่กลายเป็นฝันร้ายในการดีบั๊กเนื่องจากพยายามบันทึกเพนนีมากกว่าปอนด์ รหัสนี้ไม่ค่อยบำรุงรักษาให้อยู่คนเดียวแม้จะมีประสิทธิภาพในสถานที่แรก
เขาพูดถูกมั้ย
เขาถูกต้องจากมุมมองประสิทธิภาพขั้นพื้นฐานมาก เรียบเรียงไม่มีความรู้ของฉันสามารถเพิ่มประสิทธิภาพรหัส polymorphic ที่เกี่ยวข้องกับวัตถุและการจัดส่งแบบไดนามิกดีกว่าคำสั่งเปลี่ยน คุณจะไม่มีวันสิ้นสุดด้วย LUT หรือข้ามตารางไปยังโค้ดอินไลน์จากรหัส polymorphic เนื่องจากรหัสดังกล่าวมีแนวโน้มที่จะทำหน้าที่เป็นเครื่องมือเพิ่มประสิทธิภาพสำหรับผู้รวบรวม (มันจะไม่รู้ว่าจะเรียกฟังก์ชันใดจนกระทั่งเวลาที่การส่งแบบไดนามิก เกิดขึ้น)
มันจะมีประโยชน์มากกว่าที่จะไม่คิดค่าใช้จ่ายนี้ในแง่ของตารางการกระโดด แต่จะเป็นเรื่องของอุปสรรคการเพิ่มประสิทธิภาพ สำหรับ polymorphism การเรียกBase.method()
นั้นไม่อนุญาตให้คอมไพเลอร์ทราบว่าฟังก์ชันใดที่จะถูกเรียกว่าmethod
เป็นเวอร์ช่วลเสมือนไม่ปิดผนึกและสามารถแทนที่ได้ เนื่องจากไม่ทราบว่าจะเรียกใช้ฟังก์ชันใดล่วงหน้าจึงไม่สามารถปรับการเรียกฟังก์ชันให้เหมาะสมและใช้ข้อมูลเพิ่มเติมในการตัดสินใจปรับให้เหมาะสมเนื่องจากไม่ทราบว่าจะเรียกใช้ฟังก์ชันใดใน เวลาที่รวบรวมรหัส
เครื่องมือเพิ่มประสิทธิภาพเป็นสิ่งที่ดีที่สุดเมื่อพวกเขาสามารถมองเข้าไปในฟังก์ชั่นการโทรและทำการปรับให้เหมาะสมซึ่งอาจทำให้ผู้โทรและผู้รับแบนราบหรืออย่างน้อยก็ปรับผู้โทรให้ทำงานอย่างมีประสิทธิภาพมากที่สุด พวกเขาไม่สามารถทำเช่นนั้นได้หากพวกเขาไม่ทราบว่าจะเรียกฟังก์ชั่นใดล่วงหน้า
เขาเพิ่งพูดถึงลาของเขาหรือไม่?
การใช้ค่าใช้จ่ายนี้ซึ่งมักจะเป็นเงินจำนวนมากเพื่อพิสูจน์ว่าการเปลี่ยนสิ่งนี้ให้เป็นมาตรฐานการเข้ารหัสที่ใช้อย่างสม่ำเสมอนั้นเป็นเรื่องที่โง่มากโดยเฉพาะอย่างยิ่งสำหรับสถานที่ที่มีความจำเป็นในการขยาย นั่นคือสิ่งสำคัญที่คุณต้องการระวังด้วยการเพิ่มประสิทธิภาพก่อนวัยอันควร: พวกเขาต้องการเปลี่ยนความกังวลเกี่ยวกับประสิทธิภาพเล็กน้อยให้เป็นมาตรฐานการเข้ารหัสที่ใช้อย่างสม่ำเสมอทั่วทั้งโค๊ดเบสโดยไม่คำนึงถึงการบำรุงรักษาใด ๆ
ฉันทำผิดเล็กน้อยกับคำพูด "แฮ็กเกอร์ C เก่า" ที่ใช้ในคำตอบที่ยอมรับแม้ว่าเนื่องจากฉันเป็นหนึ่งในนั้น ไม่ใช่ทุกคนที่ได้รับการเข้ารหัสมานานหลายทศวรรษโดยเริ่มจากฮาร์ดแวร์ที่ จำกัด มากได้กลายเป็นเครื่องมือเพิ่มประสิทธิภาพก่อนวัยอันควร แต่ฉันก็ได้พบและทำงานกับสิ่งเหล่านั้นด้วย แต่ประเภทเหล่านั้นไม่เคยวัดสิ่งต่าง ๆ เช่นการคาดคะเนความผิดพลาดในสาขาหรือแคชคิดถึงพวกเขาคิดว่าพวกเขารู้ดีกว่าและยึดแนวคิดเรื่องความไร้ประสิทธิภาพในฐานข้อมูลการผลิตที่ซับซ้อนโดยยึดตามความเชื่อโชคลาง คนที่ทำงานอย่างแท้จริงในสาขาที่สำคัญต่อการปฏิบัติงานมักเข้าใจว่าการเพิ่มประสิทธิภาพที่มีประสิทธิภาพเป็นการจัดลำดับความสำคัญที่มีประสิทธิภาพและการพยายามกำหนดมาตรฐานการเข้ารหัสที่ย่อยสลายได้อย่างง่าย ๆ เพื่อการประหยัดเงินเป็นสิ่งที่มีความสำคัญมาก
เพนนีมีความสำคัญเมื่อคุณมีฟังก์ชั่นราคาถูกที่ไม่ทำงานมากนักซึ่งเรียกว่าพันล้านครั้งในวงที่มีความสำคัญและประสิทธิภาพสูง ในกรณีนี้เราสิ้นสุดการบันทึก 10 ล้านดอลลาร์ มันไม่คุ้มค่าที่จะโกนหนวดเมื่อคุณมีฟังก์ชั่นที่เรียกว่าสองครั้งซึ่งร่างกายคนเดียวมีค่าใช้จ่ายหลายพันดอลลาร์ ไม่ควรที่จะใช้เวลาในการต่อรองกับการซื้อรถ หากคุณซื้อโซดานับล้านกระป๋องจากผู้ผลิต กุญแจสำคัญในการเพิ่มประสิทธิภาพที่มีประสิทธิภาพคือการเข้าใจต้นทุนเหล่านี้ในบริบทที่เหมาะสม คนที่พยายามประหยัดเพนนีในการซื้อทุกครั้งและแนะนำให้คนอื่นพยายามต่อรองเพนนีไม่ว่าสิ่งที่พวกเขาซื้อไม่ใช่เครื่องมือเพิ่มประสิทธิภาพที่มีทักษะ