Sự khác biệt giữa phần mềm 32 bit và phần mềm 64 bit là kích thước của các con trỏ và có thể là kích thước của các thanh ghi số nguyên. Đó là nó.
Điều đó có nghĩa là tất cả các con trỏ trong chương trình của bạn có kích thước gấp đôi. Và (ít nhất là trên kiến trúc ILP32 / LP64) long
, kích thước của bạn cũng gấp đôi. Điều này thường làm tăng khoảng 30% kích thước mã đối tượng. Điều này có nghĩa rằng …
- mã đối tượng của bạn sẽ mất ~ 30% lâu hơn để tải từ đĩa vào RAM
- mã đối tượng của bạn sẽ chiếm thêm ~ 30% dung lượng trong bộ nhớ
- bạn đã giảm băng thông bộ nhớ một cách hiệu quả (đối với mã đối tượng) xuống ~ 20%
- bạn đã giảm đáng kể kích thước của bộ đệm hướng dẫn xuống ~ 20%
Điều này có ảnh hưởng tiêu cực không đáng kể đến hiệu suất.
Làm điều này chỉ có ý nghĩa nếu bạn có thể "mua lại" những chi phí hiệu suất bằng cách nào đó. Về cơ bản, có hai cách để làm điều này: bạn thực hiện rất nhiều phép toán số nguyên 64 bit hoặc bạn cần nhiều hơn 4 bộ nhớ ánh xạ GiByte. Nếu một hoặc cả hai điều đó là đúng, thì nên sử dụng phần mềm 64 bit, nếu không thì không.
Lưu ý: có một số kiến trúc không có biến thể 32 hoặc 64 bit tương ứng. Trong trường hợp đó, câu hỏi rõ ràng không có ý nghĩa. Nổi tiếng nhất là IA64, chỉ 64 bit và không có biến thể 32 bit, và x86 / AMD64, mặc dù có liên quan chặt chẽ, các kiến trúc khác nhau , x86 chỉ 32 bit, AMD64 chỉ 64 bit.
Trên thực tế, tuyên bố sau đó không còn đúng 100% nữa. Linux gần đây đã thêm x32 ABI, cho phép bạn chạy mã AMD64 với các con trỏ 32 bit, do đó, mặc dù đó không phải là kiến trúc CPU "phù hợp", nhưng đó là cách sử dụng kiến trúc AMD64 theo cách như thể nó có nguồn gốc Biến thể 32 bit. Điều này được thực hiện chính xác bởi vì chi phí hiệu năng mà tôi đã đề cập ở trên đã gây ra các vấn đề thực sự có thể đo lường được, có thể định lượng được cho người dùng trong thế giới thực chạy mã thế giới thực trong các hệ thống trong thế giới thực.