2013-11-27 23 views
8

Làm thế nào để tắt tất cả các tối ưu hóa trong GCC? Sử dụng -O0 không hoạt động vì nó vẫn tối ưu hóa các câu lệnh không có hiệu ứng hoặc bất kỳ mã nào sau một vòng lặp vô hạn mà không có bất kỳ câu lệnh ngắt nào.Làm thế nào để tắt tất cả các tối ưu hóa trong GCC

+0

có là không có, tất cả Tôi có là -g -g strict-dwarf -Wall – user2124324

+0

Tôi không nghĩ rằng bạn có thể tắt tất cả các tối ưu hóa. –

+0

Thậm chí không có cờ gcc nào cũng có một số tối ưu cơ bản. Nó có ý nghĩa để loại bỏ các báo cáo không có hiệu ứng (tối ưu hóa hay không). Chỉ cần tò mò: tại sao bạn muốn giữ mã chết? –

Trả lời

7

Không có cách nào để làm cho gcc không bỏ qua mã và các mã không thể truy cập không có hiệu lực.

Điều bạn có thể làm là làm cho mã không thể truy cập được có thể truy cập được bằng cách sử dụng các biến dễ bay hơi.

volatile bool always_true = true; 

if(always_true ) 
{ 
    //infinite loop 
    //return something 
} 

//Useless code 

trong ví dụ trên, gcc sẽ không optomize ra mã vô dụng vì nó không thể biết nó là Infact vô dụng

int a = 5; 
int b = 5; 
volatile int c = 9; 

c += 37; 
return a + b; 

Trong ví dụ này, số nguyên c sẽ không được tối ưu hóa ra vì gcc không không thể biết đó là mã số chết.

2

Bạn phải làm cho mã của bạn gần như không thể được tối ưu hóa bởi trình biên dịch. Ví dụ:

  • sử dụng volatile từ khóa trên các biến mà bạn muốn không được tối ưu hóa
  • chắc chắn rằng mã có hiệu lực thi hành, ví dụ: không chỉ là chỉ thay đổi giá trị biến mà còn in các giá trị hoặc lưu trữ nó để biến khác hay làm phép tính vào biến và lưu nó trong một biến khác
  • tài liệu tham khảo/thay đổi biến trong chức năng khác để đảm bảo trình biên dịch không thể đánh giá nó không được sử dụng trong thời gian biên dịch
Các vấn đề liên quan