Tại hệ thống Linux, bạn có thể thực hiện một số thử nghiệm với các chương trình ví dụ được biên dịch tĩnh. Ví dụ.
$ size `which busybox `
text data bss dec hex filename
1830468 4448 25650 1860566 1c63d6 /bin/busybox
Kích thước được tính bằng byte. Đầu ra này độc lập với định dạng tệp thực thi, vì kích thước của các phần khác nhau bên trong định dạng tệp. Phần văn bản có chứa mã máy và công cụ const. Phần dữ liệu chứa dữ liệu để khởi tạo tĩnh các biến. Kích thước bss là kích thước của dữ liệu chưa được khởi tạo - tất nhiên dữ liệu chưa được khởi tạo không cần phải được lưu trữ trong tệp thi hành.)
Vâng, busybox chứa rất nhiều chức năng (như tất cả các lệnh shell thông thường, vỏ…) .
Nếu bạn liên kết các ví dụ riêng với gcc -static, hãy nhớ rằng libc đã sử dụng của bạn có thể tăng đáng kể kích thước chương trình và sử dụng libc được nhúng có thể hiệu quả hơn nhiều.
Để kiểm tra xem bạn có thể xem diet-libc hoặc uclibc và liên kết với điều đó không. Trên thực tế, busybox thường được liên kết với uclibc.
Lưu ý rằng kích thước bạn nhận theo cách này chỉ cung cấp cho bạn một đơn đặt hàng có độ lớn. Ví dụ, máy trạm của bạn có thể sử dụng kiến trúc CPU khác so với bảng arduino và mã máy của kiến trúc khác nhau, có thể khác nhau, nhiều hơn hoặc ít hơn, về kích thước của nó (vì kích thước toán hạng, hướng dẫn có sẵn, mã hóa opcode và một).
Để tiếp tục với thứ tự thô về độ lớn lý do, busybox chứa khoảng 309 tools (bao gồm ftp daemon và các công cụ tương tự), tức là kích thước mã trung bình của công cụ hộp thư là khoảng 5k.
64k là đủ cho mọi người! –
16kB đại diện cho bất cứ nơi nào từ "một phần mười kích thước cần thiết cho thời gian chạy tự động liên kết" đến "khoảng một nghìn câu", sau này giả định trung bình 16 byte cho một câu lệnh được biên dịch. –
đảm bảo không phân bổ tĩnh bất kỳ bộ đệm lớn nào. – Anon