CreateFileMapping завершается ошибкой, когда 64-разрядное приложение достигает 2 ГБ

1

У меня есть 64-разрядное приложение WPF/С#, которое выделяет память с помощью CreateFileMapping(), функция возвращает ошибку 1455, когда я нажимаю ограничение 2 ГБ.

Моя машина имеет 32 ГБ ОЗУ, а файл страницы отключен. Может ли это быть CreateFileMapping (win32 API) работает только на 32 бит?

_byteCount = (uint)((_stride) * height * ((short)bpp).NumberOfBytes());

 ColorFileMapping = CreateFileMapping(new IntPtr(-1), IntPtr.Zero, 0x04, 0, _byteCount, null);
  • 3
    Ключевым фактором здесь выглядит отключенный файл страницы: «Файл подкачки слишком мал для выполнения этой операции». В нормальных условиях (с файлом подкачки) даже 32-разрядное приложение может создавать сопоставления файлов за пределами 2 и 4 ГБ (оно отображает представления, на которые распространяются ограничения 32-разрядного адресного пространства).
  • 1
    Я согласен с @RomanR. - когда я использую большие MMF, всегда необходимо подкрепить их временным файлом, иначе системная подкачка будет забита. Достаточно легко создать временный файл, который удаляется при закрытии, так что в нем мало дополнительного кода.
Показать ещё 3 комментария
Теги:
winapi
memory
memory-management

1 ответ

0

_byteCount должен иметь тип DWORD, чтобы избежать переполнения uint.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню