|
|
1
3
我认为,例如,方法的标准方法是像任何静态方法一样实现,只实现一次,但具有
|
|
|
2
4
在通常的实现中,任何给定函数只有一个副本。通过传递一个隐藏的参数(称为
对于虚拟函数,事情会变得更加复杂:每个类都有一个vtable,其中包含一组指向虚拟函数的指针,并且每个对象都有一个指向其类的vtable的指针。通过查找vtable指针、查看正确的偏移量以及调用该指针指向的函数来调用虚拟函数。 |
|
|
3
2
不,不是这样的。
方法是
|
|
|
4
2
因为你对
inline是编译器用函数的实际内容替换调用的提示。但这只是一个提示-编译器可以选择忽略该提示。
如果编译器遵守提示,则每个调用都将替换为函数内容。这意味着编译器每次都会生成代码
如果编译器忽略了提示,编译器/链接器将安排所有调用都指向一个单一版本(因为它是内联的,经典策略是使用函数的每个翻译单元将获得一个单独的副本,其中包含指向链接器的指令,以仅保留一个版本)。 最后,让我们来解释一下函数不是内联的地方。在这种情况下,编码人员需要确保定义恰好出现在一个翻译单元中,并且所有调用都将发送到此版本。 |
|
|
5
1
不,编译器只为
|
|
6
0
编译器为自己的数据结构中的每个类(而不是对象)创建一个条目。类的此项包含指向该类方法的指针。 对象在内存中表示为指向父类的指针及其实例字段的集合(因为每个对象的实例字段都不同)。然后,当调用一个方法时,该对象将跟随指向其父级的指针,然后跟随指向相应方法的指针。对象的指针也提供给方法,该方法充当此指针。 虚拟方法有点复杂,但它们是以类似的方式完成的。 如果你想了解更多,看看你是否可以参加编程语言课程。 以下是对ASCII艺术的拙劣解释:
|
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
|
Daniel Lobo · 使用约束进行优化 1 年前 |
|
Sergio · python中大量数字的乘法 1 年前 |
|
|
Sergey Dev · 临时表与表变量 2 年前 |
|
|
John · 减少C中的内存消耗++ 2 年前 |