Эти меньшие типы дают вам уменьшение памяти только тогда, когда вы храните их в распакованных массивах или аналогичных. Там каждый будет принимать столько битов, сколько указано суффиксом типа.
В общем случае все они занимают столько же памяти, сколько Int
или Word
, основное отличие состоит в том, что значения автоматически сужаются до соответствующего размера в битах при использовании типов с фиксированной шириной, и есть ( все же) больше оптимизаций (в основном в форме правил перезаписи) для Int
и Word
, чем для Int8
и т. д., поэтому некоторые операции будут медленнее при их использовании.
Относительно вопроса, следует ли использовать Word64
повсюду или использовать меньшие типы, это зависит. В 64-битной системе при компиляции с оптимизацией производительность Word
и Word64
в основном должна быть одинаковой, поскольку там, где это важно, оба должны быть распакованы, а работа выполняется на необработанной машине Word#
. Но, вероятно, еще есть несколько правил для Word
, которые еще не имеют Word64
, так что, возможно, в конце концов есть разница. В 32-разрядной системе большинство операций на Word64
осуществляются с помощью вызовов C, поэтому операции на Word64
на намного медленнее, чем операции на Word
.
Таким образом, в зависимости от того, что важнее, простота кода или производительность в разных системах, либо
- использование
Word64
во всем: простой код, хорошая производительность на 64-битных системах
- используйте
Word
, если ваши значения гарантированно поместятся в 32-битные и преобразуются в Word64
в самый последний безопасный момент: более сложный код, но лучшая производительность в 32-битных системах.