Nhận được một lỗi biên dịch trên mã tiêu chuẩn hoặc một lỗi biên dịch nội bộ có nhiều khả năng hơn các trình tối ưu hóa bị sai. Nhưng tôi đã nghe nói về trình biên dịch tối ưu hóa các vòng lặp không chính xác mà quên một số tác dụng phụ một nguyên nhân phương pháp.
Tôi không có đề xuất về làm thế nào để biết nếu đó là bạn hoặc trình biên dịch. Bạn có thể thử một trình biên dịch khác.
Một ngày nọ tôi tự hỏi liệu đó có phải là mã của tôi hay không và ai đó đã đề nghị valgrind cho tôi. Tôi đã dành 5 hoặc 10 phút để chạy chương trình của mình với nó (tôi nghĩvalgrind --leak-check=yes myprog arg1 arg2
đã làm nhưng tôi đã chơi với các tùy chọn khác) và nó ngay lập tức cho tôi thấy một dòng chạy trong một trường hợp cụ thể là vấn đề. Sau đó, ứng dụng của tôi chạy trơn tru kể từ khi không có sự cố, lỗi hoặc hành vi lạ. valgrind hoặc một công cụ khác giống như nó là một cách tốt để biết nếu đó là mã của bạn.
Lưu ý bên lề: Tôi đã từng tự hỏi tại sao hiệu suất của ứng dụng của tôi bị hút. Hóa ra tất cả các vấn đề về hiệu suất của tôi cũng nằm trong một dòng. Tôi đã viết for(int i=0; i<strlen(sz); ++i) {
. Các sz là một vài mb. Vì một số lý do, trình biên dịch đã chạy strlen mỗi lần ngay cả sau khi tối ưu hóa. Một dòng có thể là một vấn đề lớn. Từ màn trình diễn đến tai nạn