Điều gì làm cho EXE phát triển về kích thước?
Thư viện bên ngoài, đặc biệt là thư viện tĩnh và thông tin gỡ lỗi, tổng kích thước mã, thư viện thời gian chạy của bạn. Nhiều mã hơn, nhiều thư viện hơn == exe lớn hơn.
Để giảm kích thước của exe, bạn cần xử lý exe với tiện ích gnu strip, loại bỏ tất cả thư viện tĩnh, loại bỏ thư viện thời gian chạy C/C++, tắt tất cả kiểm tra thời gian chạy và bật tối ưu hóa kích thước trình biên dịch. Làm việc không có CRT là một nỗi đau, nhưng điều đó là có thể. Ngoài ra còn có thư viện wcrt (thay thế thời gian chạy C) được tạo để tạo các ứng dụng nhỏ (bằng cách này, nó chưa được cập nhật/duy trì trong 5 năm qua).
Ví dụ nhỏ nhất mà tôi có thể tạo bằng trình biên dịch msvc là khoảng 16 kilobyte. Đây là một ứng dụng cửa sổ hiển thị cửa sổ đơn và yêu cầu msvcrt.dll để chạy. Tôi đã sửa đổi nó một chút, và biến nó thành trò đùa thực tế mà lau hình ảnh trên màn hình.
Để biết các kỹ thuật giảm kích thước exe ấn tượng, bạn có thể muốn xem .kkrieger. Nó là một game bắn súng góc nhìn người thứ nhất 3D, tổng cộng 96 kilobyte. Trò chơi có một cấp độ lớn và chi tiết, hỗ trợ trình đổ bóng, bóng thời gian thực, v.v. so sánh với Saurbraten (xem screenshots). Ứng dụng cửa sổ làm việc nhỏ nhất (bản demo 3D với âm nhạc) mà tôi từng gặp là 4 kilobyte lớn và sử dụng các kỹ thuật nén và (có thể) các tính năng không có giấy tờ (tức là thực tế * .com executbale có thể giải nén và khởi động win32 exe trên windows xp) ..
Trong hầu hết các trường hợp, kích thước * .exe không thực sự làm phiền bạn (tôi chưa thấy đĩa mềm trong vài năm), miễn là nó là hợp lý (dưới 100 megabyte). Ví dụ về kích thước tập tin "không hợp lý" xem gỡ lỗi xây dựng của Qt 4 cho mingw.
Điều này dẫn đến việc xóa gần 1/3 dòng mã của tôi nhưng số tiền của tôi vẫn là 364KB.
Rất có thể do thư viện bên ngoài sử dụng bởi trình biên dịch, kiểm tra thời gian chạy, v.v. Ngoài ra, đây là thao tác gán. Nếu bạn không sử dụng kiểu tùy chỉnh cho x (với hàm tạo bản sao), thao tác "sao chép" rất có khả năng dẫn đến số lượng thao tác nhỏ - tức là xóa 1/3 dòng không đảm bảo mã của bạn sẽ bằng 1/3 ngắn hơn.
Nếu bạn muốn xem mức độ ảnh hưởng của sửa đổi, bạn có thể "yêu cầu" trình biên dịch tạo danh sách asm cho cả hai phiên bản của chương trình rồi so sánh kết quả (thủ công hoặc bằng cách khác). Hoặc bạn có thể bỏ qua/so sánh cả hai phiên bản thực thi. BUt Tôi chắc chắn rằng bằng cách sử dụng dải GNU hoặc loại bỏ các thư viện bổ sung sẽ có tác dụng nhiều hơn loại bỏ các toán tử gán.
Tại sao nó ít hơn? 'point = point2' đang thực hiện công việc giống hệt như trước (bên trong toán tử), chỉ với một giao diện khác. – GManNickG
@GMan: đó là lý do tại sao anh ấy hỏi câu hỏi này ... có lẽ anh ấy tin rằng exe đã tăng kích thước dựa trên các dòng mã. –
Im sẽ upvote này chỉ đơn giản là cho thực tế rằng đây là một câu hỏi thực sự tốt mà rất nhiều người hỏi khi bắt đầu lập trình của họ. –