Source file
src/runtime/mem_js.go
Documentation: runtime
1
2
3
4
5
6
7
8 package runtime
9
10 import (
11 "unsafe"
12 )
13
14
15
16
17 func sysAlloc(n uintptr, sysStat *sysMemStat) unsafe.Pointer {
18 p := sysReserve(nil, n)
19 sysMap(p, n, sysStat)
20 return p
21 }
22
23 func sysUnused(v unsafe.Pointer, n uintptr) {
24 }
25
26 func sysUsed(v unsafe.Pointer, n uintptr) {
27 }
28
29 func sysHugePage(v unsafe.Pointer, n uintptr) {
30 }
31
32
33
34
35 func sysFree(v unsafe.Pointer, n uintptr, sysStat *sysMemStat) {
36 sysStat.add(-int64(n))
37 }
38
39 func sysFault(v unsafe.Pointer, n uintptr) {
40 }
41
42 var reserveEnd uintptr
43
44 func sysReserve(v unsafe.Pointer, n uintptr) unsafe.Pointer {
45
46
47 if v != nil {
48
49
50
51
52 return nil
53 }
54
55
56
57 initReserveEnd := alignUp(lastmoduledatap.end, physPageSize)
58 if reserveEnd < initReserveEnd {
59 reserveEnd = initReserveEnd
60 }
61 v = unsafe.Pointer(reserveEnd)
62 reserveEnd += alignUp(n, physPageSize)
63
64 current := currentMemory()
65
66 needed := int32(reserveEnd / physPageSize)
67 if current < needed {
68 if growMemory(needed-current) == -1 {
69 return nil
70 }
71 resetMemoryDataView()
72 }
73
74 return v
75 }
76
77 func currentMemory() int32
78 func growMemory(pages int32) int32
79
80
81
82 func resetMemoryDataView()
83
84 func sysMap(v unsafe.Pointer, n uintptr, sysStat *sysMemStat) {
85 sysStat.add(int64(n))
86 }
87
View as plain text