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