Nếu tôi có các lớp sau:Thứ tự tối ưu của các thành viên trong một lớp học là gì?
class Example
{
bool m_b1;
SomeClass m_sc;
bool m_b2;
char * m_name;
bool m_b3;
int m_i1;
SomeClass * m_sc;
int m_i2;
};
trật tự tối ưu của các thành viên là gì? Theo như tôi biết, thứ tự tuyên bố của các thành viên bằng với thứ tự của các thành viên trong bộ nhớ, khi tạo ra một thể hiện của lớp này.
- Tôi có nên sắp xếp các thành viên để các loại bằng nhau không?
- Mọi con trỏ có được tính là cùng loại không?
- Sắp xếp lại có ảnh hưởng đến kích thước của đối tượng không? Có 4 hoặc 8 liên kết byte áp dụng ở đây?
- Làm cách nào tôi có thể thấy các tác động của các yếu tố trên? Có sizeof hiển thị bộ nhớ được sử dụng bởi một đối tượng bao gồm cả không gian trống để căn chỉnh không?
- Có tốt hơn vào cuối ngày để sắp xếp các thành viên sao cho ý nghĩa và ngữ cảnh của họ dễ hiểu hơn không?
Trừ khi bạn đang lập trình cho một hệ thống nhúng với bộ nhớ rất ít tôi sẽ tranh luận thứ tự đó không quan trọng nhiều. Chỉ khi bạn có mảng hoặc * lô * của biến thành viên (trong trường hợp này tôi sẽ nói thiết kế của bạn sai) để nó có thể gây ra sự cố bộ nhớ đệm và mã cực kỳ quan trọng (ít khi xảy ra), chỉ khi đó bạn nên bắt đầu suy nghĩ về việc nhóm và đặt hàng. Bắt đầu bằng cách ưu tiên khả năng đọc (có nghĩa là khả năng bảo trì), và chỉ thay đổi nếu bạn hoàn toàn cần. –
Tôi muốn tranh luận rằng kích thước chồng chéo của đối tượng có ảnh hưởng đến thời gian chạy nhiều hơn khi bạn khai báo thành viên. tất cả các thành viên bị CPU dư thừa bằng cách tính toán 'này + offset' tại thời gian biên dịch, vì vậy trong thời gian chạy không có nhiều sự khác biệt –