objectsize

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 5, 2024 License: MIT Imports: 3 Imported by: 0

README

size - calculates variable's memory consumption at runtime

Sometimes you may need a tool to calculate the size of an object (-tree) in your Go program at runtime. This package makes an attempt to do so. The original package is based on binary.Size() from Go standard library.

Features:

  • supports non-fixed size variables and struct fields: struct, int, slice, string, map;
  • supports complex types including structs with non-fixed size fields;
  • supports all basic types (numbers, bool);
  • supports chan and interface;
  • supports pointers;
  • implements infinite recursion detection (i.e. pointer inside struct field references to parent struct).

Usage example

package main

import (
    "fmt"

    "github.com/TomTonic/objectsize"
)

func main() {
    a := struct {
        a int
        b string
        c bool
        d int32
        e []byte
        f [3]int64
    }{
        a: 10,                    // 8 bytes
        b: "Text",                // 16 (string itself) + 4 = 20 bytes
        c: true,                  // 1 byte
        d: 25,                    // 4 bytes
        e: []byte{'c', 'd', 'e'}, // 24 (slice itself) + 3 = 27 bytes
        f: [3]int64{1, 2, 3},     // 3 * 8 = 24 bytes
    } // 84 + 3 (padding) = 87 bytes

    fmt.Println(size.Of(a))
}

// Output: 87

Documentation

Overview

Package objectsize implements run-time calculation of size of an object (-tree) in Go. The source code is based on the "binary.Size()" function from Go standard library. size.Of() omits size of slices, arrays and maps containers itself (24, 24 and 8 bytes). When counting maps separate calculations are done for keys and values.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Of

func Of(v interface{}) (uint64, error)

Of returns the size of 'v' in bytes. Returns 0 and error!=nil if there is an error during calculation.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL