【发布时间】:2011-10-28 03:06:24
【问题描述】:
我原以为 R 有一个标准的存储对象开销(似乎是 24 字节,至少对于整数向量而言),但一个简单的测试表明它比我想象的要复杂。例如,取长度为 100 的整数向量(使用随机抽样,希望避免出现任何sneaky sequence compression tricks that might be out there),我发现不同长度的向量可以具有相同的大小,如下所示:
> N = 100
> V = vector(length = 100)
> for(L in 1:N){
+ z = sample(N, L, replace = TRUE)
+ V[L] = object.size(z)
+ }
>
> options('width'=88)
> V
[1] 48 48 56 56 72 72 72 72 88 88 88 88 104 104 104 104 168 168 168 168
[21] 168 168 168 168 168 168 168 168 168 168 168 168 176 176 184 184 192 192 200 200
[41] 208 208 216 216 224 224 232 232 240 240 248 248 256 256 264 264 272 272 280 280
[61] 288 288 296 296 304 304 312 312 320 320 328 328 336 336 344 344 352 352 360 360
[81] 368 368 376 376 384 384 392 392 400 400 408 408 416 416 424 424 432 432 440 440
152 显示的值给我留下了深刻的印象(观察结果:152 = 128 + 24,虽然 280 = 256 + 24 并不那么突出)。有人可以解释这些分配是如何产生的吗?尽管出现了 V 单元格,但我一直无法在文档中找到明确的定义。
【问题讨论】:
-
这很可能是
object.size实现的产物。请注意帮助如何将其描述为估算值... -
@Nick:哦不,这有点吓人,因为我非常依赖
object.size()。感谢您的指点。当我读到它时,由于可能的归因(甚至可能是编码)问题而出现了不确定性。但是生活中没有比整数向量更简单的了。 -
我同意,但无论如何你都必须小心,因为重用通常是隐藏的(只需查看两个巨大的 data.frame 的 object.size 共享除了 1 列之外的所有内容)
-
我更新了表格以显示为 5x20
标签: r memory-management