Tiêu chuẩn C không cho phép tối ưu hóa cấu trúc nhất định: ví dụ, sắp xếp lại các trường, hợp nhất trường, loại bỏ các trường không bao giờ đọc, kéo các trường ra khỏi cấu trúc nếu chúng có thể được biến thành các biến tự động , vv Điều này là cần thiết vì nhiều lý do, bao gồm bố cục cấu trúc nhất quán trên các đơn vị biên dịch và cho phép các cấu trúc tương thích với dàn diễn viên.C tối ưu hóa cấu trúc trình biên dịch
Thực hiện bất kỳ tiện ích bổ sung hiện đại nào (ví dụ: gcc, clang, Visual C) có hỗ trợ tiện ích mở rộng cho phép tôi nói rằng nó là không được thực hiện các tối ưu hóa này?
Một cách tự nhiên, chúng chỉ có ý nghĩa đối với các định nghĩa là cục bộ đối với một đơn vị biên dịch đơn, để trình biên dịch có thể thấy tất cả các cách sử dụng có thể có của cấu trúc; và một số thứ nhất định (như định nghĩa cấu trúc tương thích với dàn diễn viên) sẽ trở nên không sử dụng được. Nhưng đối với một số nhiệm vụ, đây có thể là một tối ưu hóa rất có giá trị.
Tôi biết rằng gcc sử dụng để có tùy chọn -fipa-struct-reorg
để cho phép chính xác điều này, nhưng nó không bao giờ hoạt động rất tốt và bị rách, và cuối cùng đã bị loại bỏ. Nhưng tôi không biết nếu nó được thay thế bằng bất cứ thứ gì. Và tôi đã không thể tìm thấy bất cứ điều gì trong tiếng kêu vang, điều đó làm tôi ngạc nhiên bởi vì tôi nghĩ rằng đây chính xác là loại tối ưu mà clang sẽ là tất cả ...
Sẽ -flto có thể tối ưu hóa những thứ như thế này? –
nó * có thể * giúp đỡ nếu bạn cung cấp cho các biến struct lớp lưu trữ 'register', mà thi hành rằng bạn không dựa vào bố trí bộ nhớ ở một mức độ ngôn ngữ; tuy nhiên, trình tối ưu hóa có thể tìm ra điều đó bất kể sự hiện diện của 'đăng ký', và tôi không biết liệu nó có khác biệt gì trong thực tế hay không ... – Christoph
Không hoạt động, thật không may, nhưng đáng thử --- ta. ('register' không hợp lệ trên cấu trúc thành viên hoặc biến tĩnh, và dường như bị bỏ qua trên biến tự động.) –