Как насчет этого для теста. Создавайте HBITMAP в цикле. Подсчет количества использованных теоретически байтов (в зависимости от разрядности вашей видеокарты).
Сколько байтов HBITMAP можно выделить до того, как они начнут давать сбой? (Или, поочередно, пока вы не начнете видеть влияние на память).
DDB управляются драйверами устройств. Следовательно, они, как правило, хранятся в одном из двух мест: - в выгружаемом пуле режима ядра или в самой памяти видеокарт. И то, и другое не будет отражено ни в одном подсчете памяти процесса.
Теоретически драйверы устройств могут выделять системную память для растровых изображений, перемещая их в vram по мере необходимости ... но некоторые драйверы видеокарт считают, что видеопамяти должно быть достаточно, и просто выделяют все HBITMAP на карте. Это означает, что вам не хватает места для HBITMAP либо с отметкой 2 ГБ (если они выделены в выгружаемом пуле ядра; в зависимости от доступного ОЗУ и при условии 32-разрядных версий Windows), либо с отметкой 256 МБ (или сколько памяти у видеокарты).
Это обсуждение охватывало зависимые от устройства растровые изображения.
DIBSections - это особый случай, поскольку они размещаются в памяти, доступной из режима ядра, но доступны в пользовательском пространстве. Таким образом, любое приложение, которое использует большое количество растровых изображений, вероятно, должно использовать, где это возможно, DIBSections, поскольку должно быть гораздо меньше возможностей истощить систему пространства для хранения DDB.
Я подозреваю, что для системы по-прежнему существует ограничение DIBSections на уровне 2 Гб (в 32-битных версиях Windows), поскольку отсутствует понятие «текущий процесс» в режиме ядра, к которому драйверы видеоустройств будут нуждаться в доступе.