size

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Jun 27, 2020 License: MIT Imports: 1 Imported by: 37

README

size - calculates variable's memory consumption at runtime

Part of the Transflow Project

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

Features:

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

TODO:

  • support for map, interface and chan.
Usage example
package main

import (
	"fmt"

	"github.com/DmitriyVTitov/size"
)

func main() {
	a := struct {
		a int
		b string
		c bool
		d int32
		e []byte
		f [3]int64
	}{
		a: 10,                    // 8 bytes
		b: "Text",                // 4 bytes
		c: true,                  // 1 byte
		d: 25,                    // 4 bytes
		e: []byte{'c', 'd', 'e'}, // 3 bytes
		f: [3]int64{1, 2, 3},     // 24 bytes
	}

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

// Output: 44

Documentation

Overview

Package size implements run-time calculation of size of the variable. Source code is based on "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{}) int

Of returns the size of 'v' in bytes. If there is an error during calculation, Of returns -1.

Types

This section is empty.

Jump to

Keyboard shortcuts

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