Trên thực tế, nếu mã của bạn không có gì, là nó thậm chí còn công bằng mà trình biên dịch vẫn tạo ra một thực thi? ;-)
Vâng, trên Windows mọi tệp thực thi sẽ vẫn có kích thước, mặc dù nó có thể hợp lý nhỏ. Với hệ thống MS-DOS cũ, một ứng dụng hoàn toàn không có gì sẽ chỉ là một vài byte. (Tôi nghĩ rằng bốn byte để sử dụng ngắt 21h để đóng chương trình.) Sau đó, một lần nữa, những ứng dụng được nạp thẳng vào bộ nhớ. Khi định dạng EXE trở nên phổ biến hơn, mọi thứ đã thay đổi một chút. Bây giờ các tập tin thực thi có thêm thông tin về quy trình, như việc di chuyển mã và phân đoạn dữ liệu cộng với một số tổng kiểm tra và thông tin phiên bản. Sự ra đời của Windows đã thêm một tiêu đề khác vào định dạng, để cho MS-DOS biết rằng nó không thể thực thi tệp thực thi vì nó cần chạy dưới Windows. Và Windows sẽ nhận ra nó mà không có vấn đề gì. Tất nhiên, định dạng thực thi cũng được mở rộng với thông tin tài nguyên, như bitmap, biểu tượng và biểu mẫu hộp thoại và nhiều, nhiều hơn nữa.
Tệp thực thi không có gì hiện nay có kích thước từ 4 đến 8 kilobyte, tùy thuộc vào trình biên dịch của bạn và mọi phương pháp bạn đã sử dụng để giảm kích thước của nó. Nó sẽ ở kích thước mà UPX thực sự sẽ dẫn đến các tập tin thực thi lớn hơn! Các byte bổ sung trong tệp thi hành của bạn có thể được thêm vì bạn đã thêm một số thư viện nhất định vào mã của mình. Đặc biệt là các thư viện với dữ liệu khởi tạo hoặc tài nguyên sẽ thêm một số lượng đáng kể các byte. Việc thêm thông tin gỡ lỗi cũng làm tăng kích thước của tệp thực thi.
Nhưng trong khi tất cả điều này làm cho một bài tập tốt đẹp ở việc giảm kích thước, bạn có thể tự hỏi nếu nó thực tế để chỉ tiếp tục lo lắng về sự cồng kềnh của các ứng dụng. Đĩa cứng hiện đại sẽ phân chia các tệp trong các phân đoạn và cho các đĩa thực sự lớn, sự khác biệt sẽ rất nhỏ. Tuy nhiên, số lượng rắc rối nó sẽ mất để giữ cho kích thước càng nhỏ càng tốt sẽ làm chậm tốc độ phát triển, trừ khi bạn là một nhà phát triển chuyên gia được sử dụng để tối ưu hóa. Những loại tối ưu hóa này không có xu hướng cải thiện hiệu suất và xem xét dung lượng đĩa trung bình của hầu hết các hệ thống, tôi không thấy lý do tại sao nó sẽ thực tế. (Tuy nhiên, tôi làm tối ưu hóa mã của riêng mình theo những cách tương tự nhưng sau đó một lần nữa, tôi có kinh nghiệm với những tối ưu hóa này.)
Quan tâm đến số
EXE header? Nó bắt đầu bằng chữ MZ, cho "Mark Zbikowski".Phần đầu tiên là tiêu đề MS-DOS kiểu cũ cho các tập tin thực thi và được sử dụng làm sơ khai cho MS-DOS nói rằng chương trình là
không thực thi MS-DOS. (Trong nhị phân, bạn có thể tìm thấy văn bản 'Chương trình này không thể chạy trong chế độ DOS.' Về cơ bản tất cả những gì nó làm: hiển thị thông báo đó. Tiếp theo là tiêu đề PE, Windows sẽ nhận ra và sử dụng thay cho MS-DOS Nó bắt đầu bằng các chữ cái
PE for Portable Executable. Sau tiêu đề thứ hai này sẽ có bản thân thực thi, được chia thành nhiều khối mã và dữ liệu, tiêu đề chứa các bảng phân bổ lại đặc biệt cho hệ điều hành biết nơi tải một khối cụ thể. giữ này đến một giới hạn, thực thi cuối cùng có thể được nhỏ hơn 4 KB, nhưng 90% sau đó sẽ là thông tin tiêu đề và không có chức năng.
Một đề xuất: Bạn có nhận được kết quả tương tự bằng cách sử dụng bản dựng minGW của GCC không? Tôi không chắc liệu kích thước đó có khác thường hay không, vì tôi cũng không quen với C++. – Macha
UPX? http://upx.sourceforge.net/ – bobince
Vâng, tôi biết UPX, nhưng vấn đề ở đây là: trình biên dịch không nên tạo ra ~ 23KB rác cho một chương trình trống. – George