Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个程序,其总内存占用约为 100 MiB(VM 大小,在顶部,而在 中停止gdb),它试图使用gzopen. 尽管系统有 6GB 内存完全空闲(甚至不包含缓存),并且文件系统上有大量空间(我知道,那将是 ),但errno设置为时失败。是否有更模糊的问题可能导致这种情况?库中的某些东西是否无缘无故地在千兆字节的内存上分配了千兆字节?ENOMEMENOSPC
gdb
gzopen
errno
ENOMEM
ENOSPC
请注意,我的 ulimit 设置为无限制。
不,zlib 中没有任何东西可以分配超过一两个 MiB。zlib 只会将 errno 设置为零。就其本身而言,它永远不会将 errno 设置为 ENOMEM。它调用的库函数可能。你用的是什么版本的zlib?
原来 zlib 没有返回ENOMEM。它之所以退出是因为我们向它传递了一个模式参数w+,这是无效的,因为它不能同时读取和写入给定的 gzip 文件。来自以前的库/系统调用ENOMEM发生的事情。errno
w+