考虑以下向量x
和y
x <- "a"
y <- deparse(x)
来自?nchar
nchar
将一个字符向量作为参数,并返回一个向量,其元素包含x的相应元素的大小。
来自?object.size
计算的是对象的大小,并且不包括在符号表中存储其名称所需的空间。
根据这两个定义,内存中y
的对象大小是否应该大于x
的对象大小?
> nchar(x) == nchar(y)
[1] FALSE
> object.size(x) == object.size(y)
[1] TRUE
机器信息:
> version[[1]]
# [1] "x86_64-pc-linux-gnu"
答案 0 :(得分:3)
不一定。您通常不会为字符串留出所需的精确内存量,因为它很难跳过并在内存中找到您需要的内存,因此分配将以块的形式进行。观察
rv<-1:100
os<-sapply(rv, function(x) object.size(paste0(rep("a",x), collapse="")))
plot(rv,os, xlab="string length", ylab="object size")
在这里,我们创建字符串&#34; a&#34;,&#34; aa&#34;,&#34; aaa&#34;,&#34; aaaa&#34;等,并查看对象大小。请注意,对象的大小不会随着每个附加字符而增加,但是当您通过阈值时,会获得更大的块分配给您。
因此,对象大小并不能告诉您数据实际占用的字节数,它只是告诉您已经预留了多少字节。实际上并没有相同的东西。