![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
![]()
Уже похожую тему создавал,но тут другая функция:
Код:
Блок памяти свободен,но регион не резервируется. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
А на размер libsize не пробовали посмотреть... сколько \ должно быть в имени файла (в С/С++ должно быть два)
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
![]()
Размер получает правильный.Почему-то не работает именно VirtualAlloc, если загрузить через MapViewOfFileEx - всё замечательно проецируется.
Надо разобраться,когда регион должен появиться в памяти? После VirtualAlloc или когда мы туда запишем данные? MEM_COMMIT вроде используется для передачи данных региону. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
![]()
А ещё появилась мысль - может нельзя выделить память размером файла? Там же типа гранулярность должна соблюдаться, т.е. размер региона должен быть кратным некоторому значению чтобы CPU мог работать с такой страницей
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]()
GetLastError()?
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 02.12.2012
Сообщений: 250
|
![]()
Она ничего не дает,вернее выдает 87 - неверный параметр.То же самое выдает и после GetFileSize,но размер то определяется.
ShowMessage(IntToStr(libsize)) выдает точный размер файла в байтах Хотя при PAGE_EXECUTE_READWRITE кажется значение другое ,498 вроде - нет доступа |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]() |
![]() |
![]() |
![]() |
#8 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]()
книжка учит, что
MEM_RESERVE - означает, что диапазон виртуальных адресов будет зарезервирован для возможного использования, память при этом не выделеятся (связи с физической памятью нет) MEM_COMMIT - рабоает только для адресов, которые уже имеют MEM_RESERVE, и означает, что память будет выделена при первой попытке доступа к ней (будет установлена связь с физической памятью). поэтому иногда имеет смысл делать MEM_RESERVE | MEM_COMMIT в одном VirtualAlloc кстати, а разве GetFileSize принимает имя файла, а не его хендл? Последний раз редактировалось f.hump; 07.03.2013 в 14:06. |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
Можно делать MEM_COMMIT напрямую
|
![]() |
![]() |
![]() |
#10 | |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]()
Действительно, видел много раз, оно работает, но всё же в MSDN:
Цитата:
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Загрузить файл с диска в динамическую память через VirtualAlloc | calypso | Win Api | 2 | 19.02.2013 14:41 |
как резервируется память для переменной | assch | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 22.12.2010 15:42 |
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 |