Question

J'utilise une bibliothèque de manipulation d'image qui génère une exception lorsque je tente de charger des images> 4 Go en taille. Il prétend être 64bits, mais ne serait pas une bibliothèque de chargement des images 64 bits permettent plus que cela? Je pense qu'ils recompilés leurs bibliothèques C en utilisant un modèle mémoire 64 bits / compilateur mais toujours utilisé des entiers non signés et mise à niveau a échoué à utiliser 64 types de bits.

Est-ce une conclusion raisonnable?

Modifier - En tant après Thought mémoire OS devenu si fragemented que l'allocation de gros morceaux est plus possible? (Il ne fonctionne pas correctement après un redémarrage soit, mais simplement se demander.) Qu'en est-il dans .NET? Peut-.Net geres mémoire devenue si fragmentée que l'allocation de gros morceaux échoue?

Était-ce utile?

La solution

Il est une suggestion raisonnable, mais la cause exacte pourrait être un certain nombre de choses - par exemple quel OS vous utilisez, la quantité de RAM / swap avez-vous? L'application / OS peut pas trop engager la mémoire virtuelle de sorte que vous aurez besoin de 4 Go (ou plus) de RAM libre pour ouvrir l'image.

Hors intérêt semble t-il être un arrêt définitif à la limite de 4 Go - à savoir ne une image 3.99GB réussir, mais 4 Go un échec - vous dites qu'il fait ce qui suggère une certaine utilisation d'une taille de 32 bits dans les bibliothèques structures de données.

Mise à jour

En ce qui concerne votre deuxième question - pas vraiment. Quasiment tous les systèmes d'exploitation modernes utilisent la mémoire virtuelle, de sorte que chaque processus obtient son propre espace d'adressage contigu. Une région contiguë unique dans un espace d'adressage de processus n'a pas besoin d'être soutenu par la RAM physique contiguë, il peut être composé d'un certain nombre de domaines physiques distincts de RAM fait pour ressembler ils sont contigus; de sorte que le système d'exploitation n'a pas besoin d'avoir un seul morceau de 4 Go de RAM libre pour donner à votre application un morceau de 4 Go.

Il est possible qu'une application pourrait fragmenter son espace d'adressage virtuel tel qu'il n'y a pas de place pour une région de 4 Go contiguë, mais compte tenu de la taille d'un espace d'adressage 64 bits, il est probablement très peu probable dans votre scénario.

Autres conseils

Oui, sauf peut-être le format de fichier binaire lui-même limite la taille des images.

Pour répondre à votre suivi, je l'ai lu récemment cet article et l'a trouvé intéressant.

Et oui, .NET peut avoir des problèmes avec la fragmentation de la mémoire .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top