c - `fopen()` 的垃圾回收?

标签 c garbage-collection fopen pypy boehm-gc

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.

http://doc.pypy.org/en/latest/cpython_differences.html

最佳答案

如果不是很明显,没有 Boehm GC 在 C 中是可能的。整个库是一大堆未定义的行为,恰好适用于一些(很多?)现实世界的实现。 C 实现越先进,尤其是在安全领域,它继续工作的可能性就越小。

话虽如此,我认为没有任何理由不能将相同的原理扩展到 FILE* 句柄。然而,问题在于,由于它必然是保守的 GC,剩余引用的误报将阻止文件被关闭,这对进程和文件系统的状态产生明显的影响。如果您在正确的位置明确fflush,那么它可能只是半损坏,这是可以接受的。

另一方面,使用文件描述符绝对没有任何有意义的方法来做到这一点,因为它们是小整数。对于剩余的引用,您基本上总是会出现误报。

关于c - `fopen()` 的垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54797477/

相关文章:

java - 分配的元空间大于 MaxMetaspaceSize

c - 读入文件c小错误大问题

c - 规范化 2d c 数组列或行

c - 是否可以在c中将函数作为参数传递?

ruby-on-rails - Ruby 2.1.5 - GC 调整

c# - 委托(delegate)会导致内存泄漏吗? GC.TotalMemory(true) 似乎表明如此

fopen - 没有匹配函数调用 'fopen'

c - fopen 不适用于软链接(soft link)

c - 后缀为 'f' 的双常量用法

c - 为什么linux网络驱动中需要获取系统总线的时钟信息?