C编程语言有哪些特性可以打破类型安全并禁止将实际的垃圾收集添加到语言中?说明。 首先,我不了解类型安全和垃圾收集之间的关系。如果有人可以帮助我,我会很感激。
答案 0 :(得分:1)
你可以在C中进行垃圾收集。它被称为conservative garbage collection。诀窍是将任何看起来像指针的数据视为实际上是指针,而不是回收任何可通过它访问的内存。有两个问题:首先,你不能移动数据(即压缩),因为看起来像指针的东西是否实际上是一个指针的不确定性(所以更新它指向一个新的位置可能会导致数据损坏)。
类型安全问题是C程序员可以存储指向int的指针,对其执行数学运算,然后恢复指针(如:ptrdiff_t d = (ptrdiff_t) ptr; ptr = NULL; d += 42; /* GC here would be bad */ d -= 42;
)这个指针隐藏可能导致一个保守的垃圾收集器,过早地回收只能通过该指针访问的内存。
答案 1 :(得分:-1)
类型安全和垃圾收集之间没有任何关系。例如,有一种叫做Ada的语言(虽然现在不太受欢迎),它非常类型安全,但没有垃圾收集器。同时,Javascript是一种动态语言(即根本没有类型安全性),但在大多数实现中都有垃圾收集器。