IMAGE_FILE_LARGE_ADDRESS_AWARE
chỉ phù hợp với quy trình 32 bit. Lý do là không gian địa chỉ trên Windows 32 bit được chia thành hai: 2 GB cho không gian hạt nhân và 2 GB cho không gian người dùng. Để giải quyết 2 GB bạn cần 31 bit. I E. các con trỏ trong một ứng dụng 32 bit không cần bit cuối cùng để giải quyết.
Một số ứng dụng có thể đã sử dụng bit phụ này cho các mục đích tùy chỉnh, vì vậy nếu trình quản lý bộ nhớ Windows đột nhiên đưa cho họ một địa chỉ 32 bit thực mà họ không thể xử lý. Bằng cách kích hoạt cờ IMAGE_FILE_LARGE_ADDRESS_AWARE
ứng dụng về cơ bản cho hệ điều hành biết rằng nó có thể xử lý toàn bộ không gian địa chỉ 32 bit.
Nếu bạn chạy ứng dụng IMAGE_FILE_LARGE_ADDRESS_AWARE
trên Windows 32 bit, bạn có thể truy cập 3 GB. Nếu bạn chạy cùng một ứng dụng 32 bit trên 64 bit, Windows thực sự sẽ chiếm toàn bộ không gian địa chỉ 4 GB.
Nếu bạn chạy một ứng dụng 64 bit trên 64 bit, Windows không gian địa chỉ người dùng là 8 TB (với 8 TB khác dành riêng cho không gian địa chỉ hạt nhân). Các ứng dụng .NET được đặt thành AnyCPU sẽ tự động là các ứng dụng 64 bit trên x64, do đó bạn không phải làm bất cứ điều gì để giải quyết bộ nhớ bổ sung. Tuy nhiên, xin lưu ý rằng CLR áp đặt giới hạn 2 GB cho bất kỳ đối tượng nào, vì vậy trong khi ứng dụng của bạn có thể sử dụng nhiều bộ nhớ, bạn không thể tạo một mảng 2 TB chẳng hạn. Xem thêm thông tin trong câu hỏi này: Single objects still limited to 2 GB in size in CLR 4.0?
Nguồn
2010-03-08 04:45:25
và đó là không cần phải làm gì thêm để đặt IMAGE_FILE_LARGE_ADDRESS_AWARE. tức là quy trình 64 bit theo mặc định có chuyển đổi đó. Tôi có đúng không? – SysAdmin
Nếu chúng tôi giới hạn mình với Windows x64: Tôi nghĩ bạn muốn nói * bạn _can_ có quyền truy cập vào 8TB *, vì bạn bị giới hạn bởi bộ nhớ vật lý hiện có và bất cứ nơi nào tệp trang đang được lưu trữ. Chúng tôi chưa có ổ cứng 8TB. –