2012-06-10 172 views
0

我有一个程序,其总内存大小约为100 MiB(虚拟机大小,在上面,而在gdb停止),试图打开一个新的(不存在的)压缩日志文件使用gzopen。这失败了,尽管系统有6GB内存完全免费(甚至没有缓存),并且文件系统上有很多空间(我知道这将是ENOSPC),但errno设置为ENOMEM。是否有更多晦涩的问题可能导致这种情况?图书馆中的某些东西是否在没有充分理由的情况下偶尔分配千兆字节的内存?gzopen()导致ENOMEM的原因

请注意,我的ulimits设置为无限制。

回答

0

原来zlib没有返回ENOMEM。因为我们已经传递了模式参数w+,因此无效,因为它无法同时读写给定的gzip文件。 ENOMEM来自前一次库/系统调用发生在errno的事件。

0

不,zlib中没有任何内容会分配超过一个或两个MiB。 zlib只会将errno设置为零。就其本身而言,它从不会将errno设置为ENOMEM。它调用的库函数可能。你使用的是什么版本的zlib?

相关问题