Использование памяти матричного объекта в RStudio - PullRequest
1 голос
/ 10 июля 2019

Предположим, у меня есть большая матрица x типа numeric с элементами 1e4 * 1e4.

x должно потребоваться 1e8 * 8 / 1e6 = 800 МБ памяти (плюс некоторый заголовок).Это подтверждается object.size() и pryr::object_size():

> x <- matrix(NA_real_, nrow = 1e4, ncol = 1e4)
> object.size(x)
800000216 bytes
> pryr::object_size(x)
800 MB

Однако размер, указанный на вкладке «среда», составляет 762,9 МБ.

Как работает RStudio рассчитать использование памяти объектами, указанными на вкладке «окружение» в RStudio , и откуда эта разница?

1 Ответ

2 голосов
/ 10 июля 2019

RStudio показывает тот же объем памяти, что и object.size. МБ содержит 1024 КБ, а КБ содержит 1024 Б:

object.size(x)
# 800000216 bytes
object.size(x) / 1024 / 1024
# 762.9 bytes

Я попытался посмотреть в pryr::object_size коде, но он реализован на C. Я посмотрел в исходном коде , и похоже, что вычисление байтов выглядит так:

 double bytes = 0;
  // Big vectors always allocated in 8 byte chunks
  if      (n_bytes > 16) bytes = n_bytes * 8;
  // For small vectors, round to sizes allocated in small vector pool
  else if (n_bytes > 8)  bytes = 128;
  else if (n_bytes > 6)  bytes = 64;
  else if (n_bytes > 4)  bytes = 48;
  else if (n_bytes > 2)  bytes = 32;
  else if (n_bytes > 1)  bytes = 16;
  else if (n_bytes > 0)  bytes = 8;

  return bytes;
}

Так что, вероятно, именно поэтому ваш расчет рассчитан на 800 МБ, что соответствует pryr.

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