64-разрядная библиотека, ограниченная 4 ГБ?

StackOverflow https://stackoverflow.com/questions/1148885

  •  18-09-2019
  •  | 
  •  

Вопрос

Я использую библиотеку обработки изображений, которая выдает исключение при попытке загрузить изображения размером > 4 ГБ.Он утверждает, что он 64-битный, но разве 64-битная библиотека не позволила бы загружать изображения большего размера?Я думаю, что они перекомпилировали свои библиотеки C, используя 64-разрядную модель памяти / компилятор, но по-прежнему использовали целые числа без знака и не смогли перейти на использование 64-разрядных типов.

Это разумный вывод?

Редактировать - Как следствие, может ли память операционной системы стать настолько фрагментированной, что выделение больших фрагментов больше невозможно?(Это тоже не работает сразу после перезагрузки, но просто интересно.) Как насчет под .NET?Может ли .СЕТЕВАЯ управляемая память стать настолько фрагментированной, что выделение больших фрагментов завершится неудачей?

Это было полезно?

Решение

Это разумное предложение, однако точной причиной может быть несколько причин - например, на какой операционной системе вы работаете, сколько у вас оперативной памяти / подкачки?Приложение / ОПЕРАЦИОННАЯ система могут не использовать избыточный объем виртуальной памяти, поэтому для открытия образа вам потребуется 4 ГБ (или более) свободной оперативной памяти.

Из интереса кажется, что это определенная остановка на границе 4 ГБ, т. е.работает ли изображение объемом 3,99 ГБ успешно, но 4 ГБ не удается - вы говорите, что это так, что предполагает определенное использование 32-битного размера в структурах данных библиотек.

Обновить

Что касается вашего второго вопроса - не совсем.Практически все современные операционные системы используют виртуальную память, поэтому каждый процесс получает свое собственное непрерывное адресное пространство.Отдельная непрерывная область в адресном пространстве процессов не обязательно должна поддерживаться непрерывной физической оперативной памятью, она может состоять из нескольких отдельных физических областей оперативной памяти, выполненных так, чтобы они выглядели как смежные;таким образом, операционной СИСТЕМЕ не нужно иметь ни одного свободного фрагмента оперативной памяти объемом 4 ГБ, чтобы предоставить вашему приложению фрагмент объемом 4 ГБ.

Возможно, что приложение может фрагментировать свое виртуальное адресное пространство таким образом, что в нем не останется места для непрерывной области 4 ГБ, но, учитывая размер 64-разрядного адресного пространства, это, вероятно, крайне маловероятно в вашем сценарии.

Другие советы

Да, если, возможно, сам формат двоичного файла не ограничивает размер изображений.

Чтобы ответить на ваше продолжение, я недавно прочитал это Статья и нашел это интересным.

И да, .NET могут иметь проблемы с Фрагментация памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top