|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|||||||||||
Работа в VirtualAlloc()24.05.2022, 06:46. Показов 4516. Ответов 49
Метки нет (Все метки)
Здравствуйте! Хотелось бы получить помощь в следующем вопросе. Читаю книгу по WinApi автор Рихтер, в одной из глав посвящённой виртуальной памяти, есть задание, но программка не работает так как предполагается автором.
Собственно сам код чтобы не ходить вокруг да около. В куске кода:
Поясните, что не так, возможно, нужно что-то поменять в коде книга, всё же, писалась давно, и вполне возможно произошли серьёзные изменения! Кликните здесь для просмотра всего текста
0
|
|||||||||||
| 24.05.2022, 06:46 | |
|
Ответы с готовыми решениями:
49
Работа с VirtualAlloc VirtualAlloc VirtualAlloc |
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|||
| 26.05.2022, 08:51 [ТС] | |||
|
0
|
|||
|
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
|
|
| 26.05.2022, 10:53 | |
Сообщение было отмечено Liss29 как решение
Решение
Liss29, чем компилируете и на какой системе запускаете код? Я про разрядность и размер физической памяти.
Если у вас установлено, например, 16 гб ОЗУ, Win64 и при этом вы собираете 32-х битный код, то GlobalMemoryStatus вернёт 16 гб, но в 32-х разрядном процессе столько выделить просто не выйдет. Вот запустил у себя пример - при 32-х битном - ошибка о недостаточной памяти. При 64-х - уже ошибка о недостаточном размере файла подкачки. Файл подкачки должен быть достаточен, чтобы выгрузить всю ОЗУ. (У меня ОЗУ 80 Гб, а файл подкачки 4 Гб)...
0
|
|
|
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
|
|
| 26.05.2022, 11:28 | |
|
На 32-х битном, если использовать версию без Ex - даёт 2Гб и ошибку выделения. На 64-х при Ex - ошибку недостаточности файла подкачки.
В общем - всё верно - дело в фрагментации виртуальной памяти. Потому и невозможно выделить кусок непрерывной. Код работает для x64, для x32 - нет. Очевидно, когда писалась книга в ходу не было таких объемов. Если мне память не изменяет - Рихтер в этой книге где-то пишет, что на его машине 512 Мб ОЗУ.
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|||
| 27.05.2022, 02:57 [ТС] | |||
|
Попробовал собрать на хостовой машине проект x64, НО ошибка. И указатель pvDummy == NULL.
0
|
|||
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 27.05.2022, 03:03 | |
|
Что-то вы затряли. 1 ГБ у вас он выделяет?
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|
| 27.05.2022, 03:46 [ТС] | |
|
0
|
|
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 27.05.2022, 03:54 | |
|
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|
| 27.05.2022, 04:26 [ТС] | |
|
0
|
|
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 27.05.2022, 05:37 | |
|
В 32 битах больше 3гиг не получить. Попробуйте в 64 битной программе аллокировать 3,4,5 и т.д.
Нащупайте максимум, сразу почувствуете дух инженеринга.
0
|
|
|
COM‐пропагандист
|
|
| 27.05.2022, 06:30 | |
|
Liss29, Я всё же настаиваю на вашем ответе: что, по‐вашему, ОС должна сделать когда в системе нет непрерывного куска памяти такого размера, который вы запросили?
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
||||
| 27.05.2022, 07:42 [ТС] | ||||
|
Добавлено через 27 секунд Добавлено через 14 минут
0
|
||||
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 27.05.2022, 07:52 | |
|
Liss29, сравните измеренные 33ГБ с размером вашего pagefile .
Они возможно близки.
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
||
| 27.05.2022, 08:00 [ТС] | ||
|
0
|
||
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 27.05.2022, 08:17 | |
|
14 757 395 258 967 641 292
Я вижу 14 миллионов терабайт. Многоватенько. Это значение чудесным образом совпало с величиной, которой debug версия компилятора заполняет неинициализированные переменные. Другими словами, в структуре мусор, скорее всего предыдущий вызов не исполнился. Проверьте код ошибки
0
|
|
|
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
|
||
| 27.05.2022, 08:40 | ||
|
0
|
||
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 27.05.2022, 08:49 | |
|
Вызывающий заполняет поле размера структуры, чтобы дать Винде понять к чему он готов.
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|
| 27.05.2022, 09:00 [ТС] | |
|
0
|
|
|
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
|
|
| 27.05.2022, 09:03 | |
|
Тут никаких холиваров нет.
У Рихтера код под x32 написан, о чём можно судить по использованию структуры MEMORYSTATUS, у которой поля типа DWORD, т.е. более 4 Гб содержать не могут в принципе. Если флаг increaseuserva в настройках системы не установлен, то в MEMORYSTATUS вернётся не более 2 Гб (т.е. вернётся меньшее из доступного пользовательского адресного пространства и физ.размера ОЗУ), иначе не более 3 Гб. Книга написана в 2000 году, когда типичный объем ОЗУ для ПК не превышал 256-512 Мб.
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
||||||
| 27.05.2022, 09:04 [ТС] | ||||||
|
@err,hr ERROR_INVALID_PARAMETER : Параметр задан неверно. unsigned int
Если я правильно понял, то нужно вернуться к прежнему вызову функции т.е.
0
|
||||||
|
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
|
||||||||
| 27.05.2022, 10:09 | ||||||||
|
Значение 14 757 395 258 967 641 292 некорректно. Столько быть не должно. У меня на скрине видно, что возвращается физ.объем памяти, как меньшее из объема ОЗУ и размера пользовательского АП для x64.
0
|
||||||||
| 27.05.2022, 10:09 | |
|
VirtualAlloc VirtualAlloc и VirtualProtect? VirtualAlloc + ReadFile
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|