Xử lý 32 bit có thể truy cập bao nhiêu bộ nhớ trên hệ điều hành 64 bit?


86

Trên Windows, trong các trường hợp bình thường, quy trình 32 bit chỉ có thể truy cập 2GB RAM (hoặc 3GB với một công tắc đặc biệt trong tệp boot.ini). Khi chạy tiến trình 32 bit trên hệ điều hành 64 bit, bộ nhớ còn trống bao nhiêu? Có bất kỳ công tắc hoặc cài đặt đặc biệt nào có thể thay đổi điều này không?


Câu trả lời:


92

2 GB theo mặc định. Nếu ứng dụng nhận biết được không gian địa chỉ lớn (được liên kết với / LARGEADDRESSAWARE), nó sẽ nhận được 4 GB (không phải 3 GB, hãy xem http://msdn.microsoft.com/en-us/library/aa366778.aspx )

Chúng vẫn bị giới hạn ở 2 GB vì nhiều ứng dụng phụ thuộc vào bit trên cùng của con trỏ là 0.


5
Ai đó có thể giải thích tại sao các quy trình không thể truy cập 4GB đầy đủ không?
BlueTrin

1
Ý anh là gì? Nếu bạn tự xây dựng nó, bạn có thể sử dụng cờ / LARGEADDRESSAWARE và làm cho nó hoạt động với 4GB, nếu bạn không làm vậy thì bạn sẽ phụ thuộc vào các nhà phát triển đã làm.
SilverbackNet,

Có phải vì con trỏ có thể được hiểu một cách nguy hiểm với phần bù của hai không?
rosstex

1
Bởi điều này - since many application depends on the top bit of pointers to be zeroý bạn là bit thứ 32 của lược đồ đánh địa chỉ không được xem xét hoặc sử dụng khi duyệt qua không gian địa chỉ của tiến trình.
RBT

21

4 GB trừ đi những gì hệ thống đang sử dụng nếu bạn liên kết với / LARGEADDRESSAWARE.

Tất nhiên, bạn nên cẩn thận hơn nữa với số học con trỏ nếu bạn đặt cờ đó.


-1: Hệ thống sẽ sử dụng địa chỉ 64 bit cho bản thân, do đó không cần phải trừ đi một cái gì đó
Thomas Weller

@ThomasW., Điều đó không đúng, ít nhất là trên Windows. WOW64 vẫn yêu cầu các lệnh gọi hệ thống 64 bit 32 bit. Xem msdn.microsoft.com/en-us/library/windows/desktop/…
MSN

1
Ý bạn là 605 kB của DLL? Xin lỗi, tôi không hiểu vì câu hỏi liên quan đến bộ nhớ hàng GB.
Thomas Weller

7
@ThomasW., Đó là lý do tại sao tôi nói "trừ đi những gì đang được hệ thống sử dụng."
MSN

FYI Link đã chết trên cái này
jjxtra

14

Dường như không ai động đến thực tế là nếu bạn có nhiều ứng dụng 32-bit khác nhau, hệ thống con wow64 có thể ánh xạ chúng ở bất kỳ đâu trong bộ nhớ trên 4G, vì vậy trên cửa sổ 64-bit có đủ bộ nhớ, bạn có thể chạy nhiều ứng dụng 32-bit hơn. so với trên hệ thống 32-bit gốc.


7
Bạn đang nói về RAM vật lý, trong đó OP đang nói về bộ nhớ ảo. Ngay cả trên hệ thống 32 bit, bạn có thể chạy nhiều ứng dụng, miễn là tệp trang của bạn đủ lớn.
Thomas Weller

8

Quy trình 32 bit vẫn bị giới hạn ở các ràng buộc tương tự trong hệ điều hành 64 bit. Vấn đề là con trỏ bộ nhớ chỉ rộng 32 bit, vì vậy chương trình không thể gán / phân giải bất kỳ địa chỉ bộ nhớ nào lớn hơn 32 bit.


4
Điều này sẽ hữu ích nếu bạn nói rõ rằng 32 bit giải quyết 4GB dung lượng.
Kỹ sư

4

Một quy trình 32 bit duy nhất trong hệ điều hành 64 bit được giới hạn ở 2Gb. Nhưng nếu nó được biên dịch thành tệp EXE với IMAGE_FILE_LARGE_ADDRESS_AWAREbit set, thì nó sẽ có giới hạn là 4 GB, không phải 2Gb - hãy xem https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

Những điều bạn nghe về cờ khởi động đặc biệt, 3 GB, /3GBcông tắc hoặc /uservatất cả về hệ điều hành 32 bit và không áp dụng trên Windows 64 bit.

Xem https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx để biết thêm chi tiết.

Đối với hệ điều hành 32-bit, trái ngược với niềm tin, không có giới hạn vật lý là 4GB cho hệ điều hành 32-bit. Ví dụ: Hệ điều hành máy chủ 32-bit như Microsoft Windows Server 2008 32-bit có thể truy cập lên đến 64 GB(Phiên bản Windows Server 2008 Enterprise và Datacenter) - bằng Tiện ích mở rộng địa chỉ vật lý (PAE), được Intel giới thiệu lần đầu tiên trong Pentium Pro và sau đó là AMD trong bộ xử lý Athlon - nó xác định hệ thống phân cấp bảng trang gồm ba cấp, với các mục nhập bảng 64 bit mỗi mục thay vì 32, cho phép các CPU này truy cập trực tiếp vào không gian địa chỉ vật lý lớn hơn 4 gigabyte - vì vậy về mặt lý thuyết, hệ điều hành 32 bit có thể truy cập 2 ^ 64 byte về mặt lý thuyết, hoặc 17.179.869.184 gigabyte, nhưng phân đoạn giới hạn bởi 4GB. Tuy nhiên, vì lý do tiếp thị, Microsoft đã giới hạn bộ nhớ có thể truy cập tối đa trên hệ điều hành không phải máy chủ xuống chỉ 4GB, hoặc thậm chí là 3GB hiệu quả. Do đó, một quá trình duy nhất có thể truy cập hơn 4GB trên HĐH 32-bit - và máy chủ Microsoft SQL là một ví dụ.

Các tiến trình 32-bit trong Windows 64-bit không có bất kỳ nhược điểm nào so với các tiến trình 64-bit trong việc sử dụng không gian địa chỉ ảo của nhân chia sẻ (còn gọi là không gian hệ thống ). Tất cả các quy trình, có thể là 64-bit hoặc 32-bit, trong Windows 64-bit đều chia sẻ cùng một không gian hệ thống 64-bit.

Với thực tế là không gian hệ thống được chia sẻ trên tất cả các quy trình , trên Windows 32 bit , các quy trình tạo ra một lượng lớn các xử lý (như luồng, semaphores, tệp, v.v.) tiêu tốn không gian hệ thống bởi các đối tượng hạt nhân và thậm chí có thể hết bộ nhớ nếu tổng cộng bạn có nhiều bộ nhớ. Ngược lại, trên Windows 64-bit , không gian nhân là 64-bit và không bị giới hạn bởi 4 GB. Tất cả các cuộc gọi hệ thống được thực hiện bởi các ứng dụng 32 bit được chuyển đổi thành các cuộc gọi 64 bit gốc trong chế độ người dùng .


1
Câu hỏi này hỏi về lượng bộ nhớ mà một tiến trình có thể truy cập. Điều đó bị giới hạn bởi không gian địa chỉ bộ nhớ ảo 32 bit. Chắc chắn bạn có thể có nhiều quy trình 32 bit, mỗi quy trình sử dụng 4GB trên cùng một máy tính, ngay cả với hệ điều hành 32 bit sử dụng PAE. Nhưng đó không phải là điều này câu hỏi được hỏi.
Peter Cordes

@PeterCordes - xin lỗi và cảm ơn bạn - Tôi đã cập nhật câu trả lời về giới hạn 2GB / 4GB.
Maxim Masiutin

@PeterCordes, cảm ơn bạn đã nhận xét, tôi đã cập nhật câu trả lời để nhấn mạnh rằng nhiều quy trình 32 bit, mỗi quy trình có thể sử dụng 4GB trên cùng một máy tính, ngay cả với hệ điều hành 32 bit sử dụng PAE và các quy trình 32 bit dưới 64- hệ điều hành bit không bị giới hạn dung lượng hệ thống 2GB, đây là vấn đề với hệ điều hành 32 bit.
Maxim Masiutin

-1

Bạn có cùng một hạn chế cơ bản khi chạy quy trình 32 bit trong Win64. Ứng dụng của bạn chạy trong hệ thống con 32 nhưng hoạt động tốt nhất để trông giống như Win32 và điều này sẽ bao gồm các hạn chế về bộ nhớ cho quy trình của bạn (2GB thấp hơn cho bạn, 2GB cao hơn cho hệ điều hành)


-11

Giới hạn không phải là 2g hoặc 3gb mà 4gb của nó cho 32bit.

Lý do mọi người nghĩ rằng 3gb của nó là hệ điều hành hiển thị 3gb trống khi chúng thực sự có 4gb ram hệ thống.

Tổng RAM của nó là 4gb. Vì vậy, nếu bạn có một card màn hình 1 gb được tính là một phần của tổng ram được xem bởi HĐH 32bit.

4Gig không 3 không 2 hiểu không?


2
Điều đó là không chính xác. Đối với hệ thống x86 tiêu chuẩn (không có phần mở rộng bộ nhớ), hạt nhân có thể truy cập 4GiB đầy đủ của không gian bộ nhớ (ngay cả khi máy tính chỉ có 1GiB ram do phân trang). Kernel dự trữ 2GiB trên (một số kernel dự trữ 1GiB hoặc 3GiB thay thế) để sử dụng riêng. Bộ nhớ ảo của mỗi tiến trình cũng có ánh xạ bộ nhớ dành riêng của hạt nhân và do đó tiến trình không thể sử dụng 2GiB bộ nhớ.
Alex Jorgenson

3
Ngoài ra, thẻ video không liên quan gì đến dung lượng bộ nhớ mà quá trình có thể sử dụng. Các bảng ACPI, IO được ánh xạ bộ nhớ, v.v. sử dụng địa chỉ bộ nhớ vật lý, nhưng điều đó tránh được nhờ bộ nhớ ảo.
Alex Jorgenson

1
Điều này là không chính xác. Microsoft đã chọn (lựa chọn thiết kế) để phân chia không gian địa chỉ 32-bit ảo với Windows NT sao cho 2GB được dành để ánh xạ hệ điều hành (trình điều khiển / API / lệnh gọi hệ thống, v.v.) và 2GB còn lại để sử dụng ứng dụng. / Công tắc khởi động 3GB thay đổi hành vi này (1GB cho ánh xạ hệ điều hành, 3GB cho mã ứng dụng). Tôi rời khỏi việc tìm kiếm Windows NT cũ 3.x tài liệu kiến trúc bộ nhớ ảo như một bài tập cho người đọc :-)
ripvlan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.