Ответ: «Это зависит».
Прежде всего, если вы компилируете Dart в JavaScript, все числа являются числами JavaScript, что означает Dart double
s. Даже целые числа, они просто не дробные двойники. Это означает, что у вас есть не более 53 бит точности.
Собственные числа Дартс являются 64-битными целыми числами. Виртуальная машина может представлять их как меньшие числа внутри, если видит в этом преимущество.
На 64-битной виртуальной машине все указатели являются 64-битными, поэтому вы не можете хранить что-либо меньшее, чем в куче(по крайней мере вне списков типизированных данных). Тем не менее, если ваше значение представляет собой целое число со знаком 63 бит, виртуальная машина может сохранить его непосредственно в указателе (так называемое «маленькое целое число» или «smi»), в противном случае она должна выделить кучуОбъект для хранения 64 битов, так что он все еще может определить разницу между целым числом и указателем кучи. Это важно для сборки мусора.
На 32-битной виртуальной машине все указатели являются 32-битными, и, если ваше целое число является 31 -битным целым числом со знаком, оно может быть сохранено в указателеиначе он становится объектом кучи.
Это для хранения чисел. Для локальной переменной внутри функции виртуальная машина может распаковать значение, сохраняя в стеке простые целые числа вместо чисел кучи или помеченных небольших целых чисел. Если компилятор знает, что вы используете только 16-битные целые числа, он может (теоретически) использовать только 16-битные для него. На практике все, что меньше 32 бит, вероятно, менее эффективно, и, возможно, даже на 64-битных платформах.
Эти оптимизации происходят по соображениям производительности, поэтому да, это влияет на производительность, и компилятор пытается избежать ненужныхнакладные расходы.
Это текущая реализация. Это изменение в любое время, если вы не можете определить разницу при запуске вашей программы.