用于区分可以/不能引用未定义内存的语言的术语

时间:2009-07-23 03:50:36

标签: programming-languages computer-science terminology

我总是将语言分为两种类型......让你可以引用“未定义”(未初始化,释放等)的内存,例如C,C ++,COBOL(?),汇编等等。那些你不能用的,如Java,Perl,C#和Basic。是否存在这种区别的“计算机科学”术语?虽然我们正处于这种状态,但对于我称之为“未定义的记忆”的计算机科学术语是否存在?

4 个答案:

答案 0 :(得分:5)

指针安全。

我为无法归档原作者而道歉。我知道我已经看到Erik Meijer提到并定义了它。

指针安全性(或内存安全性)是程序的属性,或者是特定语言或其他约束中的所有程序,其中程序无法寻址除明确分配和拥有的内存之外的内存,或通过中介,如OS。

类型安全也是一种属性,但通常更严格 - 如果某些东西是类型安全的,它通常也是指针安全的。在此属性中,内存被称为具有类型的“对象”,并且程序从不操作该内存,除非通过对该类型的操作。我现在暂时留下各种冲突的类型定义,因为这也是一个很大的问题。

这些属性通常适用,可以应用于各种内存管理策略 - 动态堆分配,竞技场分配器,堆栈和“静态”或“全局”存储。这不只是堆积物。

维基百科pointer safetytype safety

答案 1 :(得分:4)

您知道,在讨论这些主题时,我总是使用术语Memory Safety。我认为C / C ++是“内存不安全”的语言。我实际上并不知道这是否是公认的术语,所以我有兴趣看到其他答案。

关于“未定义记忆”的术语,我认为该术语将是另外两个术语的组合:

未分配的内存:尚未预留给程序使用的内存。

未初始化的内存:已分配的内存,但程序未给出有意义的值。

答案 2 :(得分:0)

您在考虑dynamic memory allocation和堆吗?

答案 3 :(得分:0)

你能定义“参考”吗?如果你只是意味着你可以在没有警告或错误的情况下获得垃圾记忆,我认为那里并没有真正的区别。我能想到的区别可能是“高级别”和“低级别”。高级(进一步从汇编中抽象出来)语言如Java和C#通常抽象出开始引用垃圾的能力,原因显而易见。较低级别(接近程序集)语言不仅仅是为了让它对开发人员开放(这类似于内存管理)。未定义的内存通常称为未使用,垃圾或释放的内存。