Как windows отслеживает зарезервированную виртуальную память?
Я работаю над проектом на языке Си, для которого собираюсь использовать пользовательскую схему распределения. Я хотел бы иметь несколько областей памяти, которые я могу позволить расти настолько, насколько это необходимо для удовлетворения потребностей пользователя. Я хотел бы явно разместить арены в моем 64-битном адресном пространстве таким образом, чтобы распределить их примерно равномерно, минимизируя вероятность того, что одна арена когда-либо вырастет достаточно большой, чтобы столкнуться с другой и принудительно ее перераспределить.
Эта схема основана на том, чтобы знать, что никакие случайные распределения не будут сделаны между текущим концом одной арены и началом следующей. Однако я буду использовать winAPI для своего графического интерфейса, который, по-видимому, будет выделять в моем адресном пространстве, и, насколько я вижу, я не могу диктовать его распределителям, где им это разрешено. Похоже, что вместо этого мне придется везде указывать его не разрешено выделять, вызывая VirtualAlloc с MEM_RESERVE, и поскольку чем шире разнесены арены, тем лучше, я бы предпочел, чтобы это повлекло за собой столько моего адресного пространства, сколько мне сойдет с рук.
So...would making a reservation of such a large span cause any kind of pathological behavior? People have suggested that it would gunk up Windows' system for tracking virtual memory, but never with a concrete enough explanation of how to convince me to give up on the idea. I understand that for committed memory, the OS must enumerate each page since it needs to specify how the page is mapped to physical memory. In other words, the amount of work scales with the amount of memory committed. If memory that is merely reserved is treated the same way, then my large reservation would indeed stress the system. However, since reserving lacks the complication of mapping to physical memory, I can imagine that instead of enumerating each page, it only keeps track of the start and end of each reservation. In that case, the amount of work would scale with the количество бронирований и Моя гигантская резервация была бы не хуже , чем резервация одной страницы.
Что я уже пробовал:
Чтение о модели виртуальной памяти Windows.