почему статическая рассылка так быстро в быстром - PullRequest
0 голосов
/ 06 ноября 2018

Я знаю, что в классе есть список методов. И я также знаю механизм динамической отправки. Но я перепутал со статической отправкой. Где статические методы в. Будь статические методы в глобальной хэш-таблице. И как работает статическая отправка. На что похож этот поток.

1 Ответ

0 голосов
/ 06 ноября 2018

Вы путаете два отдельных понятия.

Статическая отправка относится к способу вызова тела метода во время выполнения. Если у вас есть класс, который потенциально может иметь подклассы или какой-либо объект, о котором вам известно только то, что он соответствует определенному протоколу, вы должны использовать динамическую диспетчеризацию, что означает, что вы должны искать адрес метода в таблице. (называемый виртуальной таблицей или таблицей свидетелей), а затем перейти к этому месту. Если компилятор точно знает, какой у него объект, например, struct, final класс или final метод в классе, он знает, что метод не может быть переопределен, и поэтому может напрямую переходить к его адресу без выполнения поиска.

Метод, который объявлен static, является методом типа. Он будет вызываться для самого типа, а не для экземпляра типа, т.е. внутри метода self относится к типу, а не к экземпляру типа.

static методы не могут быть переопределены, поэтому компилятор всегда знает адрес во время компиляции и будет использовать для них статическую диспетчеризацию. Нет необходимости в каких-либо хэш-таблицах или таблицах-свидетелях.

...