Khi tôi hiểu nó, MEM_RESERVE thực sự là bộ nhớ 'miễn phí', tức là có sẵn để sử dụng bởi quy trình của tôi, nhưng vẫn chưa được phân bổ? Hoặc nó đã được phân bổ trước đó, nhưng từ đó đã được giải phóng?Sự khác nhau chính xác giữa các trạng thái MEM_RESERVE và MEM_COMMIT là gì?
Cụ thể, hãy xem trong đầu ra địa chỉ của tôi bên dưới cách tôi gần hết dung lượng địa chỉ ảo (99900 KB miễn phí, 2307872 thành MEM_PRIVATE. Nhưng các tiểu bang cho thấy rằng 44,75% trong số đó thực sự là MEM_RESERVE. miễn phí, trong quá trình của tôi ... nhưng có lẽ phân mảnh
0:000> !address -summary
--------- PEB a8bd8000 not found ----
-------------------- Usage SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Pct(Busy) Usage
259af000 ( 616124) : 22.29% 23.12% : RegionUsageIsVAD
618f000 ( 99900) : 03.61% 00.00% : RegionUsageFree
13e22000 ( 325768) : 11.78% 12.22% : RegionUsageImage
42c04000 (1093648) : 39.56% 41.04% : RegionUsageStack
42d000 ( 4276) : 00.15% 00.16% : RegionUsageTeb
2625d000 ( 625012) : 22.61% 23.45% : RegionUsageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePeb
1000 ( 4) : 00.00% 00.00% : RegionUsageProcessParametrs
1000 ( 4) : 00.00% 00.00% : RegionUsageEnvironmentBlock
Tot: a8bf0000 (2764736 KB) Busy: a2a61000 (2664836 KB)
-------------------- Type SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
618f000 ( 99900) : 03.61% : <free>
13e22000 ( 325768) : 11.78% : MEM_IMAGE
1e77000 ( 31196) : 01.13% : MEM_MAPPED
8cdc8000 (2307872) : 83.48% : MEM_PRIVATE
-------------------- State SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
57235000 (1427668) : 51.64% : MEM_COMMIT
618f000 ( 99900) : 03.61% : MEM_FREE
4b82c000 (1237168) : 44.75% : MEM_RESERVE
Largest free region: Base 7e4a1000 - Size 000ff000 (1020 KB)
theo dõi:
Vì vậy, trong điều kiện của ví dụ của tôi, quá trình này được báo cáo 'ra khỏi bộ nhớ', nhưng trên thực tế nó có thể làm cho việc phân bổ, nhưng ai đó MEM_RESERVED nhiều hơn mức cần thiết tại thời điểm đó, ngăn người khác thậm chí có thể phân bổ?
Vì vậy, trong ví dụ của tôi, quá trình này báo cáo 'hết bộ nhớ', nhưng thực sự nó có thể phân bổ, nhưng ai đó MEM_RESERVED nhiều hơn mức cần thiết tại thời điểm đó, ngăn người khác thậm chí có thể phân bổ? – pj4533
MEM_RESERVED là một quá trình, do đó, quá trình dành riêng bộ nhớ đó không phải ai khác (như trong một quy trình khác). –
Chắc chắn, nhưng vấn đề là quá trình này báo cáo rằng phân bổ không thành công, vì vậy vấn đề là ai đó (một số hệ thống con trong quá trình NÀY) MEM_RESERVED bộ nhớ nhiều hơn, và ngăn cản một số hệ thống con khác tạo phân bổ? – pj4533