Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / libgo / go / runtime / mem.go
1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package runtime
6
7 import "unsafe"
8
9 // Note: the MemStats struct should be kept in sync with
10 // struct MStats in malloc.h
11
12 // A MemStats records statistics about the memory allocator.
13 type MemStats struct {
14         // General statistics.
15         Alloc      uint64 // bytes allocated and still in use
16         TotalAlloc uint64 // bytes allocated (even if freed)
17         Sys        uint64 // bytes obtained from system (should be sum of XxxSys below)
18         Lookups    uint64 // number of pointer lookups
19         Mallocs    uint64 // number of mallocs
20         Frees      uint64 // number of frees
21
22         // Main allocation heap statistics.
23         HeapAlloc    uint64 // bytes allocated and still in use
24         HeapSys      uint64 // bytes obtained from system
25         HeapIdle     uint64 // bytes in idle spans
26         HeapInuse    uint64 // bytes in non-idle span
27         HeapReleased uint64 // bytes released to the OS
28         HeapObjects  uint64 // total number of allocated objects
29
30         // Low-level fixed-size structure allocator statistics.
31         //      Inuse is bytes used now.
32         //      Sys is bytes obtained from system.
33         StackInuse  uint64 // bootstrap stacks
34         StackSys    uint64
35         MSpanInuse  uint64 // mspan structures
36         MSpanSys    uint64
37         MCacheInuse uint64 // mcache structures
38         MCacheSys   uint64
39         BuckHashSys uint64 // profiling bucket hash table
40
41         // Garbage collector statistics.
42         NextGC       uint64 // next run in HeapAlloc time (bytes)
43         LastGC       uint64 // last run in absolute time (ns)
44         PauseTotalNs uint64
45         PauseNs      [256]uint64 // circular buffer of recent GC pause times, most recent at [(NumGC+255)%256]
46         NumGC        uint32
47         EnableGC     bool
48         DebugGC      bool
49
50         // Per-size allocation statistics.
51         // 61 is NumSizeClasses in the C code.
52         BySize [61]struct {
53                 Size    uint32
54                 Mallocs uint64
55                 Frees   uint64
56         }
57 }
58
59 var Sizeof_C_MStats uintptr // filled in by malloc.goc
60
61 var VmemStats MemStats
62
63 func init() {
64         if Sizeof_C_MStats != unsafe.Sizeof(VmemStats) {
65                 println(Sizeof_C_MStats, unsafe.Sizeof(VmemStats))
66                 panic("MStats vs MemStatsType size mismatch")
67         }
68 }
69
70 // ReadMemStats populates m with memory allocator statistics.
71 func ReadMemStats(m *MemStats)
72
73 // GC runs a garbage collection.
74 func GC()