Jak rozumiem, MEM_RESERVE jest w rzeczywistości "wolną" pamięcią, tj. Dostępną do wykorzystania przez mój proces, ale po prostu jeszcze jej nie przydzielono? Lub został wcześniej przydzielony, ale od tego czasu został uwolniony?Jaka jest dokładna różnica pomiędzy stanami MEM_RESERVE i MEM_COMMIT?
Dokładniej, zobacz w moim adresie wynik poniżej, jak jestem prawie poza wirtualną przestrzenią adresową (99900 KB za darmo, 2307872 jako MEM_PRIVATE, ale stany pokazują, że 44,75% z tego jest w rzeczywistości MEM_RESERVE. Czy to oznacza, że jest rzeczywiście wolny, w moim procesie ... ale może rozdrobniony
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)
Kontynuacja:
to w kategoriach moim przykładzie, proces ten donosi „out of memory”, ale w rzeczywistości może sprawić przydziały, ale ktoś MEM_RESERVED więcej niż potrzebował w tym momencie, uniemożliwiając innym nawet przydzielenie?
Więc jeśli chodzi o mój przykład, proces ten zgłasza "brak pamięci", ale w rzeczywistości MOŻE zrobić alokacje, ale ktoś MEM_RESERVED więcej, niż było to potrzebne w tym momencie, uniemożliwiając komuś innemu przydzielenie? – pj4533
MEM_RESERVED jest za proces, więc proces zarezerwował tę pamięć, a nie kogoś innego (jak w innym procesie). –
Oczywiście, ale chodzi o to, że ten proces raportuje, że alokacje się nie udają, więc problem polega na tym, że ktoś (jakiś podsystem w tym procesie) MEM_RESERVED więcej pamięci, a jej zapobieganie innemu podsystemowi przed przydzielaniem? – pj4533