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