Страница: 1 |
|
Вопрос: Виртуальная память
|
Добавлено: 14.05.07 15:13
|
|
Автор вопроса: LamerOnLine | ICQ: 334781088
|
В общем, такая есть неувязочка. Нужно зачистить страницы Virtual Memory, VirtualFree бы подошло, но для запроса адресов тех же страниц нужно заюзывать VirtualQuery, и тут непонятно - что для неё есть базовый адрес и откуда его тянуть (память не выделяется через VirtualAlloc вручную)?
Извиняюсь если туплю, пока не глубоко копнулся в теме...
Ответить
|
Номер ответа: 1 Автор ответа: GSerg
Вопросов: 0 Ответов: 1876
|
Профиль | | #1
|
Добавлено: 14.05.07 15:26
|
Нужно зачистить страницы Virtual Memory
Почему?
для запроса адресов тех же страниц нужно заюзывать VirtualQuery
Почему?
память не выделяется через VirtualAlloc вручную
А как она выделяется?
Ответить
|
Номер ответа: 5 Автор ответа: GSerg
Вопросов: 0 Ответов: 1876
|
Профиль | | #5
|
Добавлено: 14.05.07 17:34
|
Система НЕ знает (в том и дело).
Например, функция GlobalAlloc внутри себя поддерживает свои собственные структуры указателей на выделенную память, которые никому не показывает - в результате ею можно выделять память с точностью до байта (сама функция, конечно, выделяет постранично, но помнит, что выделенная на предыдущем вызове страница ещё не исчерпана, и потому вернёт следующие несколько байт из неё же).
VirtualAlloc, напротив, ничего не поддерживает внутри себя и даёт страницу целиком.
Поэтому память, выделенную через GlobalAlloc, надо освобождать через GlobalFree (потому что никто больше не знает, как освободить этот кусок, не освободив остальные и не разрушив кучу).
Что делают внутри себя различные функция рантаймов, как то malloc, например, это тоже сугубо их дело.
Что нужно тебе всё-таки? Я пока так и не понял.
Ответить
|
Номер ответа: 6 Автор ответа: LamerOnLine
ICQ: 334781088
Вопросов: 108 Ответов: 2822
|
Профиль | | #6
|
Добавлено: 14.05.07 17:49
|
Ну, скажем, насчет VirtualAlloc
lpAddress
[in] The starting address of the region to allocate. If the memory is being reserved, the specified address is rounded down to the next 64-kilobyte boundary. If the memory is already reserved and is being committed, the address is rounded down to the next page boundary. To determine the size of a page on the host computer, use the GetSystemInfo function. If this parameter is NULL, the system determines where to allocate the region.
Ведь, собака, знает где выделять! По большому счету, наверное можно последовательно через VirtualQuery и параметры BaseAddress и RegionSize. Хотя может и нет
Я даже где-то примерчик видел от мелкософта, где как раз была пробежка по выделенным для процесса виртуальным страничкам...
А что нужно - сам не знаю, за что купил, за то и продаю. Но, в целом, начал осознавать - сама идея бредовая )
Ответить
|
Страница: 1 |
Поиск по форуму