Сколько памяти выделится под массив (List) из 8 целых чисел (int) в Dart?

«Сколько памяти выделится под массив (List) из 8 целых чисел (int) в Dart?» — вопрос из категории Dart Core, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Dart, который используется в Flutter, тип int является 64-битным целым числом. Это значит, что под один int в памяти выделяется 8 байт.

Для списка List<int> из 8 элементов:

  • Под данные: 8 элементов * 8 байт = 64 байта.
  • Служебная информация списка: Сам объект List содержит заголовок (указатель на класс, хэш-код) и поля для длины и ссылки на внутренний массив (_data). Это добавляет примерно 16-24 байта (зависит от платформы и режима выполнения).

Пример и проверка:

void main() {
  // Создаем фиксированный список из 8 нулей
  final list = List<int>.filled(8, 0);
  print('Длина списка: ${list.length}'); // Длина списка: 8
  // Приблизительная оценка: 64 + ~20 = ~84 байта.
}

Итог: Под список из 8 int будет выделено примерно от 80 до 90 байт.

Важные нюансы:

  1. Для типов double или int? (nullable) размер элемента также составляет 8 байт.
  2. Для String или других объектов список хранит ссылки (также 8 байт на 64-битной платформе), а сами объекты строк лежат в отдельной памяти.
  3. Списки в Dart динамически расширяются. При создании через List() или [] выделяется «буфер» с запасом, что увеличивает начальное потребление памяти.