混淆R中对象的大小

Vin*_*han -1 memory size r

> length(row)
[1] 1000
> object.size(row)
8024 bytes
> object.size(row[1])
32 bytes
Run Code Online (Sandbox Code Playgroud)

这里的行是一个列表.行的长度为1000,其元素之一为32字节.因此,列表的总大小应该是32*1000字节,但由于某种原因它的8024.这可能是什么原因?

Spa*_*man 5

初始开销:

> row = runif(1000)
> object.size(row[1])
32 bytes
> object.size(row[1:2])
40 bytes
> object.size(row[1:3])
56 bytes
> object.size(row[1:4])
56 bytes
Run Code Online (Sandbox Code Playgroud)

长度为1的向量为32个字节,每个其他元素为8个字节.还有一些其他分配功能在低端进行,有时会占用16个字节,但平均值为8.

开始时的额外字节是因为R必须保持长度和其他属性.

require(plyr)
size = ldply(1:200,function(i){object.size(row[1:i])})$V1
plot(1:200,size,type="l")
Run Code Online (Sandbox Code Playgroud)