Theo Rust Reference:Kích thước tối đa của một mảng trong 32 bit?
Các
isize
type là một kiểu số nguyên ký kết với cùng một số bit như kiểu con trỏ của nền tảng. Giới hạn trên lý thuyết trên đối tượng và kích thước mảng là giá trị tối đaisize
. Điều này đảm bảo rằngisize
có thể được sử dụng để tính toán sự khác biệt giữa các con trỏ vào một đối tượng hoặc mảng và có thể giải quyết mọi byte trong một đối tượng cùng với một byte qua kết thúc.
Điều này rõ ràng ràng buộc một mảng ở hầu hết các phần tử 2G trên hệ thống 32 bit, tuy nhiên điều không rõ là liệu mảng có bị hạn chế tối đa 2GB bộ nhớ hay không.
Trong C hoặc C++, bạn có thể truyền con trỏ đến phần tử đầu tiên và một trong quá khứ cuối cùng đến char*
và thu được sự khác biệt của con trỏ từ hai phần tử đó; có hiệu quả hạn chế mảng đến 2GB (vì sợ rằng nó tràn intptr_t
).
Có phải mảng trong 32 bit cũng bị giới hạn ở mức 2 GB trong Rust không? Hay không?
Vì vậy, câu trả lời là: có điều này được giới hạn ở mức 2GB không? –
@MatthieuM. Vâng. Tôi đã chỉnh sửa câu trả lời của mình để có một chút rõ ràng hơn về điều này. – Veedrac
'dung lượng' là' sử dụng 'trong cả hai phương pháp, do đó dung lượng tối đa của một' Vec' sẽ là 4GB. Tuy nhiên, người cấp phát có thể thất bại nếu kích thước phân bổ được yêu cầu vượt quá 2GB ... –