Даже если вы попробуете N <- 10000, все значения встречаются ровно дважды, за исключением векторов длины: </p>
- от 5 до 8 (56 байт)
- от 9 до 12 (72 байта)
- от 13 до 16 (88 байтов)
- от 17 до 32 (152 байта)
Тот факт, что число байтов встречается дважды, исходит изтот простой факт, что память распределяется по 8 байтам (которые называются Vcells в ?gc
), а целые числа занимают только 4 байта.
Кроме того, внутренняя структура объектов в R делает различиемежду малым и большим векторами для выделения памяти.Маленькие векторы распределяются в больших блоках размером около 2 Кб, тогда как большие векторы распределяются индивидуально.«Маленькие» векторы состоят из 6 определенных классов в зависимости от длины и могут хранить векторные данные размером до 8, 16, 32, 48, 64 и 128 байтов.Поскольку целое число занимает всего 4 байта, у вас есть 2, 4, 8, 12, 16 и 32 целых числа, которые вы можете хранить в этих 6 классах.Это объясняет шаблон, который вы видите.
Дополнительное количество байтов предназначено для заголовка (который образует Ncells в ?gc
).Если вы действительно заинтересованы во всем этом, прочитайте руководство R Internals .
И, как вы уже догадались, 24 дополнительных байта взяты из заголовков (или Ncells).На самом деле все немного сложнее, но точные детали можно найти в R innerals manual