Trình biên dịch C thường không tạo ra tối ưu hóa C ở bất kỳ giai đoạn nào. Thay vào đó, trình biên dịch biến C thành một biểu diễn nội bộ đơn giản hóa, và hầu hết các tối ưu hóa trình biên dịch sẽ được thực hiện trên one or more of those intermediate representations. Sau đó, trình biên dịch tạo ra lắp ráp hoặc một nhị phân từ đó.
Gần nhất bạn có thể nhận được có lẽ là biên dịch một tệp để lắp ráp mà không có tối ưu hóa và một lần nữa với tối ưu hóa cao nhất, và sau đó so sánh đầu ra lắp ráp. Bạn sẽ phải có một nắm bắt tốt về ngôn ngữ lắp ráp để làm điều đó. Nếu bạn đang sử dụng gcc
, hãy đọc về các công tắc -S và -O để biết cách thực hiện (hoặc không thực hiện) điều này.
Nếu mục tiêu của bạn là viết mã nhanh hơn, thì tốt nhất là viết C tốt hơn bằng cách sử dụng thuật toán và cấu trúc dữ liệu tốt hơn ở cấp độ C bằng cách sử dụng profiler một cách cẩn thận.
Nếu mục tiêu của bạn chỉ là hiểu tối ưu hóa, hãy thử Program Optimization và Compiler Optimization trên Wikipedia để biết một số thông tin chung.
Nguồn
2010-03-06 05:32:22
vâng tôi có thể lấy mã lắp ráp bằng cách sử dụng lệnh objdump -s. và chúng tôi có thể sản xuất mã lắp ráp bằng cách sử dụng cc -S – sganesh
Nhưng nếu tôi biết cách tối ưu hóa, tôi có thể cố gắng thực hiện tối ưu hóa của riêng mình – sganesh
Tối ưu hóa C thực tế là không thể thực hiện một cách có ý nghĩa. Hầu hết các loại thuật toán phân tích tĩnh được thiết kế để hoạt động trên một số dạng mã "ba địa chỉ" đã được dịch bởi trình biên dịch. Thuật toán dễ viết hơn khi dữ liệu hoạt động đơn giản hơn. Bắt đầu với "cuốn sách rồng" và làm việc theo cách của bạn từ đó. (http://en.wikipedia.org/wiki/Dragon_Book_(computer_science)) –