Hãy xem xét các loại sau:Liệu "tối ưu hóa cơ sở trống" trong GCC có thể cấu hình không?
struct A {};
struct B : A { int i; };
sizeof(A) > 0
theo yêu cầu của tiêu chuẩn.
sizeof(B)
phải là 4 do tối ưu hóa cơ sở trống. Tuy nhiên, trên GCC 4.1.1 nó là 5 (Tôi đang sử dụng một gói 1 trong lĩnh vực này). Và không nhất quán - một số tệp của tôi đang nhận được, một số thì không. Không thể chắc chắn những gì khác biệt được nêu ra, chúng tôi có một prjoect lớn.
Trên ba trình biên dịch khác mà tôi đang sử dụng (bởi Microsoft và Freescale), tôi không gặp phải vấn đề này. Việc tối ưu hóa cơ sở trống là tùy chọn rõ ràng, theo số this article.
Có tùy chọn trình biên dịch hoặc pragma để điều chỉnh điều này trong GCC 4.1.1 không? Tôi có thể giải quyết vấn đề nhưng tôi muốn hiểu điều gì đang diễn ra trước. Tôi đã google trong một thời gian và dường như không thể tìm thấy bất cứ điều gì.
Trình biên dịch Intel nhận được đúng cũng như GCC. MSVC là overagressive và vi phạm các tiêu chuẩn về tối ưu hóa cơ bản trống khi một trong các lớp cơ sở cũng là một lớp cơ sở của thành viên đầu tiên. Tôi đã đăng nhiều quy tắc kỹ lưỡng hơn cho VC++ (2005/2008) và GCC (4.1.1) quy tắc trống tại đây. http://stackoverflow.com/questions/547290/is-the-empty-base-optimization-in-gcc-configurable/919694#919694 – Adisak