Pregunta

Estoy usando una biblioteca de manipulación de imágenes que genera una excepción cuando intento cargar imágenes> 4 GB de tamaño. Se afirma estar 64bit, pero no sería una biblioteca de 64 bits permiten cargar imágenes más grande que eso? Creo que volver a compilar sus bibliotecas de C utilizando un modelo de memoria de 64 bits / compilador, pero todavía se utilizan enteros sin signo y error de actualización a utilizar 64 tipos de bits.

¿Es una conclusión razonable?

Editar - Como una consideración posterior puede convertirse en la memoria del sistema operativo de modo que la asignación de fragemented grandes trozos ya no es posible? (No funciona justo después de un reinicio o bien, pero sólo me preguntaba.) ¿Qué pasa con bajo .NET? ¿Puede el administrado de .NET vuelto tan fragmentada que la asignación de memoria grandes trozos falla?

¿Fue útil?

Solución

Es una sugerencia razonable, sin embargo, la causa exacta podría ser un número de cosas - por ejemplo, ¿que os ejecutando, la cantidad de RAM / permuta tiene usted? La aplicación / OS no puede cometer un exceso de memoria virtual por lo que tendrá 4 GB (o más) de memoria RAM libre para abrir la imagen.

Como curiosidad qué parece ser una parada definitiva en el límite de 4 GB - es decir, se realiza correctamente una imagen de 3.99GB, pero un 4 GB de una falla - usted dice que hace lo que sugeriría un uso definido de un tamaño de 32 bits en las bibliotecas estructuras de datos.

Actualizar

En cuanto a su segunda pregunta - En realidad no. Prácticamente todos los sistemas operativos modernos utilizan la memoria virtual, por lo que cada proceso recibe su propio espacio de direcciones contiguas. Una sola región contigua en el espacio de direcciones a procesos no necesita ser respaldado por la memoria física contigua, que puede estar compuesta de una serie de áreas físicas separadas de RAM hecho para que parezca que son contiguos; por lo que el sistema operativo no necesita tener un único trozo 4 GB de RAM libres para darle a su aplicación un trozo de 4 GB.

Es posible que una aplicación podría fragmentar su espacio de direcciones virtuales de modo que no hay espacio para una región contigua de 4 GB, pero teniendo en cuenta el tamaño de un espacio de direcciones de 64 bits es probable que sea muy poco probable en su escenario.

Otros consejos

Sí, a menos que tal vez el formato de archivo binario en sí limita el tamaño de las imágenes.

Para responder a su seguimiento, hace poco leí este artículo y pareció interesante.

Y sí, .NET pueden tener problemas con la fragmentación de la memoria .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top