代码之家  ›  专栏  ›  技术社区  ›  B.Gen.Jack.O.Neill

运行时的OOP与过程

  •  6
  • B.Gen.Jack.O.Neill  · 技术社区  · 14 年前

    我有一个很简单的问题,我在网上找不到答案。

    但是OOP说对象是在内存中创建的。那么,这是否意味着即使是函数也会写入R/W内存区?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Charles Salvia    14 年前

    一般来说,OOP和程序编程都是抽象的,只存在于源代码级。一旦程序编译成可执行的机器代码,这些抽象就不复存在。因此,一种特定的语言是OOP还是procedural与它使用的内存区域无关,也与执行过程中指令的位置无关。

    操作系统本身通常不知道或不关心某个特定的可执行文件是用OOP还是过程语言编写的。它只关心可执行文件是否使用与其本机指令集兼容的二进制操作码,以及可执行文件是否具有它能理解的ABI(二进制接口)。

        2
  •  3
  •   I GIVE CRAP ANSWERS    14 年前

    这是个好问题。

    鉴于作为客体构成 功能 数据 实现 把它分开。这样做的方式是,代码被分割并存储到RO段中。RW区域中的一个对象有一种方法可以引用RO区域中的代码。代码和数据的耦合只在概念上由人工程序员和类型检查器使用,以确保您不会违反规则和原则。

    一种类似Java/C的语言通常会使每个对象都有一个 标签 通过它可以到达所述物体的内容物。当方法需要引用字段时,它知道预先指定的顺序,因此它可以执行相应的操作。请注意,解决继承问题需要一些技巧,但这是这个想法的关键所在。

    类似Python/Ruby的语言通常会使对象成为散列表,其中方法是指向RO区域中代码的指针(前提是该语言是编译的,而不是通过字节码解释器运行)。函数调用是通过查找哈希表内容并跟随代码指针进行的。字段也在同一哈希表中查找。

    随着这些基础知识的深入,大多数实现都会使用一些技巧来避免跟踪指针以找到要调用的函数。他们试图找出并缩小对单个函数的可能调用。然后他们可以用直接调用正确的函数来代替查找,这是一个更快的解决方案。

    语义学 作为对象的一部分查看字段和方法。这个 实施 把它们分成反渗透和反渗透两部分。因此不需要操作系统支持。

        3
  •  1
  •   Andrey    14 年前

    哎呀,不是这样说的。我不知道你在哪里读到的,如果你加上一个有帮助的引语。

    变量,所以你所知道的变量对对象来说是正确的。在像C#(.net框架)这样的语言中,对象只能存储在堆中,因为它们是所谓的引用类型。在C++中,它们可以在任何地方生存。

    但是OOP说对象是在内存中创建的。那么,这是否意味着即使是函数也会写入R/W内存区?

    由此我得出结论,你认为函数是对象。并非所有OOP语言都是这样。它来自函数语言,其中函数是第一类对象。函数在大多数情况下是不可变的,并且放在只读部分。

    推荐文章