gpt4 book ai didi

c - 为什么弱类型在C中实现垃圾回收是 "impossible"?

转载 作者:太空狗 更新时间:2023-10-29 16:26:27 24 4
gpt4 key购买 nike

一个相当聪明的人告诉我,你不能在 C 中实现垃圾收集,因为它是弱类型的。基本思想似乎是 C 给了你太多的自由。他提到在没有类型检查的情况下转换指针...

我不太理解这个想法。有人可以给我一个解释,并可能给我一个代码示例,说明为什么这不起作用。

注意:显然 C 是关于速度的,为什么要添加垃圾收集?我真的很好奇。

最佳答案

他可能提到了这样一个事实,即您可以将指针转换为 int 并返回到原始指针类型。当您这样做时,GC 几乎不可能正确清理,请考虑:

char * p = (char *) malloc(16);
int i = (int) p;
p = 0;
// GC runs and finds that the memory is no longer referenced
p = (char *) i;
// p is now a dangling pointer

编辑:以上只会产生一个具有精确 GC 的悬空指针。正如其他人指出的那样,保守的收集器仍然可以正确处理这种情况,因为它假设可能是有效指针的任何位模式实际上是一个指针,因此不会释放分配的内存。然而,当 i 被进一步修改使得它看起来不再像指向收集器的有效指针时,这当然不再可能,例如如下:

char * p = (char *) malloc(16);
int i = ~((int) p);
p = 0;
// GC runs and finds that the memory is no longer referenced
p = (char *) ~i;
// p is now a dangling pointer

此外,(同样正如其他人所指出的)如果您想保留该语言的全部功能,则不可能为 C 实现 GC。如果您避免使用上述技巧(即您将自己限制在可能操作的子集内),那么 GC 确实是可行的。

关于c - 为什么弱类型在C中实现垃圾回收是 "impossible"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/431719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com