Câu hỏi liên quan

Tại sao các C++ lớp học mà không có member biến chiếm không gian?


–1 Phiếu
Đã hỏi 25/5/2016 bởi gb4315 (570 điểm)
Tôi tìm thấy cả hai MSVC và GCC trình biên dịch phân bổ ít một byte cho mỗi instance class ngay cả khi class là một vị ngữ với không có biến member (hoặc chỉ cần static member biến). code sau đây minh hoạ điểm.
#include <iostream>
class A
{
public:
   bool operator()(int x) const
   {
      return x>0;
   }
};
class B
{
public:
   static int v;
   static bool check(int x)
   {
      return x>0;
   }
};
int B::v = 0;
void test()
{
   A a;
   B b;
   std::cout << "sizeof(A)=" << sizeof(A) << "\\n"
             << "sizeof(a)=" << sizeof(a) << "\\n"
             << "sizeof(B)=" << sizeof(B) << "\\n"
             << "sizeof(b)=" << sizeof(b) << "\\n";
}
int main()
{
   test();
   return 0;
}
lượng:
sizeof(A)=1
sizeof(a)=1
sizeof(B)=1
sizeof(b)=1
câu hỏi của tôi là compiler tại sao cần? Lý do duy nhất tôi có thể đi lên với là đảm bảo rằng tất cả các con trỏ var member khác biệt vì vậy, chúng ta có thể phân biệt giữa hai thành viên của type A hoặc B bằng cách so sánh các gợi ý cho họ. Nhưng chi phí này là khá nghiêm trọng khi đối phó với kích thước nhỏ container. Xem xét có thể data liên kết, chúng tôi có thể nhận được lên đến 16 byte cho mỗi class mà không có vars (?). Giả sử chúng ta có một thùng chứa tùy chỉnh thông thường sẽ tổ chức một vài int giá trị. Sau đó xem xét một loạt các thùng chứa như vậy (với 1000000 thành viên). Overhead sẽ là 16 * 1000000! Một điển hình case nơi mà nó có thể xảy ra là một container class với một vị ngữ so sánh được lưu trong một biến member . Ngoài ra, xem xét rằng một instance class nên luôn luôn chiếm một số không gian, những gì type trên cao nên được dự kiến khi gọi A()(value)?

Xin vui lòng đăng nhập hoặc đăng ký để trả lời câu hỏi này.


ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...