在程序执行期间,确定性的时间将内存(和资源锁)返回给OS。程序本身的控制流足以知道可以在哪里释放给定资源。就像人类程序员fclose(file)
在程序完成后如何知道在哪里写一样。
GC通过在执行控制流时在运行时直接解决问题来解决此问题。但是,有关控制流的真实性的真正来源是来源。因此,从理论上讲,应该可以free()
通过分析源(或AST)来确定在编译之前将调用插入到哪里。
引用计数是实现此目的的一种明显方法,但是很容易遇到仍然引用指针(仍在范围内)但不再需要指针的情况。这只是将手动分配指针的职责转换为手动管理这些指针的作用域/引用的职责。
似乎可以编写一个可以读取程序源代码的程序,并且:
- 预测程序控制流的所有排列-达到与观看程序实时执行类似的准确性
- 跟踪所有对分配资源的引用
- 对于每个引用,遍历整个后续控制流,以找到保证绝对不会取消引用的最早点
- 在这一点上,在源代码的那一行插入一个delocation语句
那里有什么已经做到了吗?我不认为Rust或C ++智能指针/ RAII是同一回事。