utils (version 3.3)

object.size: Report the Space Allocated for an Object

Description

Provides an estimate of the memory that is being used to store an Robject.

Usage

object.size(x)

## S3 method for class 'object_size': format(x, units = "b", \dots) ## S3 method for class 'object_size': print(x, quote = FALSE, units = "b", \dots)

Arguments

x
an Robject.
quote
logical, indicating whether or not the result should be printed with surrounding quotes.
units
the units to be used in printing the size. Allowed values are "b", "Kb", "Mb", "Gb", "Tb", "Pb", "B", "KB", "MB", "GB", "TB", "PB", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB", and "auto" (see Details). Can be abbreviated.
...
arguments to be passed to or from other methods.

Value

  • An object of class "object_size" with a length-one double value, an estimate of the memory allocation attributable to the object in bytes.

Details

Exactly which parts of the memory allocation should be attributed to which object is not clear-cut. This function merely provides a rough indication: it should be reasonably accurate for atomic vectors, but does not detect if elements of a list are shared, for example. (Sharing amongst elements of a character vector is taken into account, but not that between character vectors in a single object.)

The calculation is of the size of the object, and excludes the space needed to store its name in the symbol table.

Associated space (e.g., the environment of a function and what the pointer in a EXTPTRSXP points to) is not included in the calculation.

Object sizes are larger on 64-bit builds than 32-bit ones, but will very likely be the same on different platforms with the same word length and pointer size.

units = "auto" in the format and print methods chooses the largest units in which the result is one or more (before rounding). Values in kilobytes, megabytes or gigabytes are rounded to the nearest 0.1.

The IEC standard for binary byte size units uses notation KiB, etc. Note that our uses of Kb, Mb, etc, also mean multiples of 1024 (and not of 1000) and hence the numbers for Kb, KB, and KiB are all the same - contrary to SI standard but according to widespread tradition.

See Also

Memory-limits for the design limitations on object size.

Examples

Run this code
object.size(letters)
object.size(ls)
format(object.size(library), units = "auto")

sl <- object.size(rep(letters, 1000))
(fsl <- sapply(c("Kb", "KB", "KiB"),
               function(u) format(sl, units = u)))
stopifnot(identical( ## assert that all three are the same :
             unique(substr(as.vector(fsl), 1,5)),
             format(round(as.vector(sl)/1024, 1))))

## find the 10 largest objects in the base package
z <- sapply(ls("package:base"), function(x)
            object.size(get(x, envir = baseenv())))
as.matrix(rev(sort(z))[1:10])

Run the code above in your browser using DataCamp Workspace