|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.03.2013, 13:30 | #1 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
VirtualAlloc и гранулярность памяти
Нужно выделить блок памяти строго с адреса 00596000h ,однако возникает проблема что адрес не кратен 65536 байт или 00010000h. Поэтому выделяется либо с адреса 00590000 ,либо просто возвращает ошибку 487.
Что здесь можно придумать? Мне в принципе важен не именно адрес выделения,а чтобы данные в памяти находились там где нужно. Т.е. как вариант допускается загрузка ReadFile не с 00590000,а с 005960000 адреса. Возможно ли такое замутить? |
18.03.2013, 13:53 | #2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Возможно при условии, что адрес свободной части памяти меньше или равен тому адресу, который Вам нужен.
|
18.03.2013, 14:32 | #3 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
Всмысле? Т.е. если есть свободный блок например от 00590000 до 006А0000 размером 110000 ,то если я буду выделять блок с адреса 00596000 размером больше (006А0000-00596000)=10А000 то получу ошибку? Значит надо предварительно забить дырку от 00590000 до 00596000 ?
|
18.03.2013, 15:43 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
выделяйте с запасом а дальше уже делайте вычисление адреса.
Только если вам нужен определенный адрес то нет гарантии, что он будет свободен. |
19.03.2013, 20:08 | #5 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Цитата:
по теме, просто выделяй с запасом и пользуйся смещением от начала выделенного блока. в принципе, книжка учит, что если сначала сделать MEM_RESERVE, а потом MEM_COMMIT, то зарезервированные адреса будут выравнены по granularity (0х010000), а выделенные адреса - по размеру страницы (0х01000 или 0х0200000). |
|
07.04.2013, 20:23 | #6 |
Новичок
Джуниор
Регистрация: 07.04.2013
Сообщений: 5
|
Может выделить (COMMIT) блок с выравненным адресом 00590000 с размером, гарантированно большим, что бы мог хранить данные. А сами данные записать по адресу 00596000 (со смещение 6000).
>>Мне в принципе важен не именно адрес выделения,а чтобы данные в памяти находились там где нужно |
08.04.2013, 00:58 | #7 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
08.04.2013, 09:53 | #8 |
Новичок
Джуниор
Регистрация: 07.04.2013
Сообщений: 5
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не резервируется память VirtualAlloc | calypso | Win Api | 17 | 11.03.2013 15:56 |
Загрузить файл с диска в динамическую память через VirtualAlloc | calypso | Win Api | 2 | 19.02.2013 14:41 |
VirtualAlloc или GlobalAllocPtr? что лучше. | VintProg | Общие вопросы Delphi | 4 | 12.06.2010 13:29 |
VirtualAlloc | alenka_ej | Win Api | 3 | 03.06.2010 16:05 |
VirtualAlloc и VirtualProtect? | VintProg | Общие вопросы Delphi | 1 | 29.06.2009 11:50 |