Каков размер целочисленной переменной в дротиках? - PullRequest
0 голосов
/ 30 сентября 2019

На сайте Dart они сказали, что размер целого числа составляет 64 бита, это максимальный размер целого числа, или это размер любого целого числа, даже если целое число является небольшим числом, например 12?

Если каждое целое число имеет размер 64 бита, влияет ли это на производительность приложения?

1 Ответ

1 голос
/ 30 сентября 2019

Ответ: «Это зависит».

Прежде всего, если вы компилируете Dart в JavaScript, все числа являются числами JavaScript, что означает Dart double s. Даже целые числа, они просто не дробные двойники. Это означает, что у вас есть не более 53 бит точности.

Собственные числа Дартс являются 64-битными целыми числами. Виртуальная машина может представлять их как меньшие числа внутри, если видит в этом преимущество.

На 64-битной виртуальной машине все указатели являются 64-битными, поэтому вы не можете хранить что-либо меньшее, чем в куче(по крайней мере вне списков типизированных данных). Тем не менее, если ваше значение представляет собой целое число со знаком 63 бит, виртуальная машина может сохранить его непосредственно в указателе (так называемое «маленькое целое число» или «smi»), в противном случае она должна выделить кучуОбъект для хранения 64 битов, так что он все еще может определить разницу между целым числом и указателем кучи. Это важно для сборки мусора.

На 32-битной виртуальной машине все указатели являются 32-битными, и, если ваше целое число является 31 -битным целым числом со знаком, оно может быть сохранено в указателеиначе он становится объектом кучи.

Это для хранения чисел. Для локальной переменной внутри функции виртуальная машина может распаковать значение, сохраняя в стеке простые целые числа вместо чисел кучи или помеченных небольших целых чисел. Если компилятор знает, что вы используете только 16-битные целые числа, он может (теоретически) использовать только 16-битные для него. На практике все, что меньше 32 бит, вероятно, менее эффективно, и, возможно, даже на 64-битных платформах.

Эти оптимизации происходят по соображениям производительности, поэтому да, это влияет на производительность, и компилятор пытается избежать ненужныхнакладные расходы.

Это текущая реализация. Это изменение в любое время, если вы не можете определить разницу при запуске вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...