Tôi đã viết chương trình C++ sau đâyTại sao các tệp tiêu đề C không làm tăng kích thước của tệp nhị phân?
class MyClass {
public:
int i;
int j;
MyClass() {};
};
int main(void)
{
MyClass inst;
inst.i = 1;
inst.j = 2;
}
và tôi biên soạn.
# g++ program.cpp
# ls -l a.out
-rwxr-xr-x 1 root wheel 4837 Aug 7 20:50 a.out
Sau đó, tôi #include
d tệp tiêu đề iostream trong tệp nguồn và tôi biên soạn lại.
# g++ program.cpp
# ls -l a.out
-rwxr-xr-x 1 root wheel 6505 Aug 7 20:54 a.out
Kích thước tệp, như mong đợi, đã tăng lên.
Tôi cũng đã viết chương trình C sau
int main(void)
{
int i = 1;
int j = 2;
}
và tôi biên soạn
# gcc program.c
# ls -l a.out
-rwxr-xr-x 1 root wheel 4570 Aug 7 21:01 a.out
Sau đó, tôi #include
d file header stdio.h và tôi biên soạn lại
# gcc program.c
# ls -l a.out
-rwxr-xr-x 1 root wheel 4570 Aug 7 21:04 a.out
Kỳ lạ thay, kích thước của các tệp thực thi vẫn giữ nguyên.
'định nghĩa bên ngoài không tạo mã; chúng chỉ cho trình biên dịch biết chúng tồn tại, do đó trình biên dịch có thể tham khảo chúng nếu chúng thực sự được sử dụng. – bdonlan
Có - làm rõ giá trị. –
Tôi không nghĩ rằng chúng là 'extern' - và ngay cả khi chúng có, thì phải có định nghĩa nào đó. Ctors/dtors của họ là một nguyên nhân (có thể là duy nhất) cho việc tăng kích thước thực thi. – sbi