Boehm gc 只处理内存分配。但如果想使用垃圾回收来处理fopen()
,从而不再需要fclose()
。有没有办法在 C 中做到这一点?
附注 例如,PyPy 采用垃圾收集方法来处理打开的文件。
The most obvious effect of this is that files (and sockets, etc) are not promptly closed when they go out of scope. For files that are opened for writing, data can be left sitting in their output buffers for a while, making the on-disk file appear empty or truncated.
最佳答案
如果不是很明显,没有 Boehm GC 在 C 中是可能的。整个库是一大堆未定义的行为,恰好适用于一些(很多?)现实世界的实现。 C 实现越先进,尤其是在安全领域,它继续工作的可能性就越小。
话虽如此,我认为没有任何理由不能将相同的原理扩展到 FILE*
句柄。然而,问题在于,由于它必然是保守的 GC,剩余引用的误报将阻止文件被关闭,这对进程和文件系统的状态产生明显的影响。如果您在正确的位置明确fflush
,那么它可能只是半损坏,这是可以接受的。
另一方面,使用文件描述符绝对没有任何有意义的方法来做到这一点,因为它们是小整数。对于剩余的引用,您基本上总是会出现误报。
关于c - `fopen()` 的垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54797477/