2012-06-10 2 views
0

J'ai un programme dont l'empreinte mémoire totale est d'environ 100 Mio (taille de VM, en haut, alors qu'il est arrêté en gdb) qui essaie d'ouvrir un nouveau journal compressé (pas encore existant) fichier en utilisant gzopen. Cela échoue, avec errno mis à ENOMEM, malgré le fait que le système dispose de 6 Go de mémoire complètement libre (même pas de caches), et beaucoup d'espace sur le système de fichiers (ce serait ENOSPC, je sais). Y a-t-il des problèmes plus obscurs qui pourraient causer cela? Quelque chose dans la bibliothèque allouer accidentellement gigaoctets sur des gigaoctets de mémoire sans raison valable?Causes de gzopen() menant à ENOMEM

Pour note, mes ulimits sont définies illimitées.

Répondre

0

Il s'avère que zlib ne renvoyait pas ENOMEM. Il a été abandonné parce que nous lui avons passé un argument de mode w+, qui n'est pas valide car il ne peut pas lire et écrire un fichier gzip donné en même temps. Le ENOMEM provenait de ce qui se trouvait être assis dans errno à partir d'appels de bibliothèque/système précédents.

0

Non, il n'y a rien dans zlib qui allouerait plus d'un MiB ou deux. zlib ne mettra que errno à zéro. Seul, il ne définit jamais errno à ENOMEM. Les fonctions de bibliothèque qu'il appelle peut. Quelle version de zlib utilisez-vous?

Questions connexes