我正在尝试实现一个基本的面向对象的 ANSI C 运行时并使用 Objective-C 作为指南。
它们似乎是三个部分。类描述、类接口(interface)和类实现。为了实例化类接口(interface),只有在运行时已经使用类描述实例化了您的类对象时,才能使用熟悉的使用类对象实例化一个对象的方法。
那么所有的类定义都是在第一次运行时静态分配的,以提供使用类对象实例化的能力吗?或者如果它们是动态分配的(在初始调用时),如何分配?它是运行循环的一部分,还是 Class 实际上是一个在转发消息之前确定它是否已经分配的函数?
最佳答案
运行时通过在实际程序执行之前调用的构造函数进行一些初始化。它们在 gcc 和 clang 中都使用 __attribute__((constructor))
。
在 Objective-C 的情况下,其中一些由编译器嵌入到二进制文件中。您必须将它们包含在标题中才能达到类似的效果。
这些函数使用编译器自动嵌入的数据。他们做一些事情,例如为类查找函数构建哈希表,然后将其用于实际的消息传递。
另一方面,实例是动态分配的。
我正在做类似的事情,所以我真的不知道比那多多少,但这和我挖的一样深。
关于c - Objective-C运行时如何实例化根元类和其他类描述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2219501/