การรับข้อผิดพลาดในการคอมไพล์ในรหัสมาตรฐานหรือข้อผิดพลาดในการคอมไพล์ภายในมีแนวโน้มมากกว่าตัวเพิ่มประสิทธิภาพที่ผิด แต่ฉันเคยได้ยินว่าคอมไพเลอร์ปรับลูปอย่างไม่ถูกต้องให้ลืมวิธีที่ทำให้เกิดผลข้างเคียง
ฉันไม่มีข้อเสนอแนะเกี่ยวกับวิธีการที่จะรู้ว่าคุณหรือคอมไพเลอร์ คุณอาจลองคอมไพเลอร์อื่น
อยู่มาวันหนึ่งฉันสงสัยว่ามันเป็นรหัสของฉันหรือไม่และมีคนแนะนำ valgrind ให้ฉัน ฉันใช้เวลา 5 หรือ 10 นาทีในการรันโปรแกรมด้วย (ฉันคิดว่าvalgrind --leak-check=yes myprog arg1 arg2
ทำ แต่ฉันเล่นกับตัวเลือกอื่น ๆ ) และมันแสดงให้ฉันเห็นหนึ่งบรรทัดที่วิ่งภายใต้กรณีเฉพาะซึ่งเป็นปัญหา จากนั้นแอพของฉันก็ทำงานได้อย่างราบรื่นนับตั้งแต่ที่ไม่มีข้อผิดพลาดแปลก ๆ ข้อผิดพลาดหรือพฤติกรรมแปลก ๆ valgrind หรือเครื่องมืออื่นเช่นมันเป็นวิธีที่ดีที่จะรู้ว่ารหัสของคุณ
หมายเหตุด้านข้าง: ฉันเคยสงสัยว่าทำไมประสิทธิภาพของแอปของฉันถึงถูกดูด มันกลับกลายเป็นว่าปัญหาการปฏิบัติงานของฉันทั้งหมดอยู่ในบรรทัดเดียวเช่นกัน for(int i=0; i<strlen(sz); ++i) {
ที่ผมเขียน sz คือไม่กี่ mb ด้วยเหตุผลบางอย่างคอมไพเลอร์รัน strlen ทุกครั้งแม้หลังจากการปรับให้เหมาะสม บรรทัดเดียวอาจเป็นเรื่องใหญ่ ตั้งแต่การแสดงจนล่ม