_MAP_PRIVATE = 0x2
_MAP_FIXED = 0x10
- _MADV_FREE = 0x6
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x6
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_PRIVATE = 0x2
_MAP_FIXED = 0x10
- _MADV_FREE = 0x6
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x6
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_PRIVATE = 0x2
_MAP_FIXED = 0x10
- _MADV_FREE = 0x6
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x6
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_PRIVATE = 0x2
_MAP_FIXED = 0x10
- _MADV_FREE = 0x6
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x6
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_PRIVATE = 0x2
_MAP_FIXED = 0x10
- _MADV_FREE = 0x5
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x5
_SA_SIGINFO = 0x8
_SA_RESTART = 0x4
MAP_PRIVATE = C.MAP_PRIVATE
MAP_FIXED = C.MAP_FIXED
- MADV_FREE = C.MADV_FREE
+ MADV_DONTNEED = C.MADV_DONTNEED
+ MADV_FREE = C.MADV_FREE
SA_SIGINFO = C.SA_SIGINFO
SA_RESTART = C.SA_RESTART
_MAP_PRIVATE = 0x2
_MAP_FIXED = 0x10
- _MADV_FREE = 0x5
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x5
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
MAP_PRIVATE = C.MAP_PRIVATE
MAP_FIXED = C.MAP_FIXED
- MADV_FREE = C.MADV_FREE
+ MADV_DONTNEED = C.MADV_DONTNEED
+ MADV_FREE = C.MADV_FREE
SA_SIGINFO = C.SA_SIGINFO
SA_RESTART = C.SA_RESTART
_MAP_PRIVATE = 0x2
_MAP_FIXED = 0x10
- _MADV_FREE = 0x5
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x5
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_PRIVATE = 0x2
_MAP_FIXED = 0x10
- _MADV_FREE = 0x5
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x5
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_PRIVATE = 0x2
_MAP_FIXED = 0x10
- _MADV_FREE = 0x5
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x5
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_PRIVATE = 0x2
_MAP_FIXED = 0x10
- _MADV_FREE = 0x5
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x5
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
MAP_PRIVATE = C.MAP_PRIVATE
MAP_FIXED = C.MAP_FIXED
- MADV_FREE = C.MADV_FREE
+ MADV_DONTNEED = C.MADV_DONTNEED
+ MADV_FREE = C.MADV_FREE
SA_SIGINFO = C.SA_SIGINFO
SA_RESTART = C.SA_RESTART
MAP_FIXED = C.MAP_FIXED
MAP_STACK = C.MAP_STACK
- MADV_FREE = C.MADV_FREE
+ MADV_DONTNEED = C.MADV_DONTNEED
+ MADV_FREE = C.MADV_FREE
SA_SIGINFO = C.SA_SIGINFO
SA_RESTART = C.SA_RESTART
_MAP_FIXED = 0x10
_MAP_STACK = 0x4000
- _MADV_FREE = 0x6
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x6
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_FIXED = 0x10
_MAP_STACK = 0x4000
- _MADV_FREE = 0x6
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x6
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_FIXED = 0x10
_MAP_STACK = 0x4000
- _MADV_FREE = 0x6
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x6
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_FIXED = 0x10
_MAP_STACK = 0x4000
- _MADV_FREE = 0x6
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x6
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
_MAP_FIXED = 0x10
_MAP_STACK = 0x4000
- _MADV_FREE = 0x6
+ _MADV_DONTNEED = 0x4
+ _MADV_FREE = 0x6
_SA_SIGINFO = 0x40
_SA_RESTART = 0x2
MAP_PRIVATE = C.MAP_PRIVATE
MAP_FIXED = C.MAP_FIXED
- MADV_FREE = C.MADV_FREE
+ MADV_DONTNEED = C.MADV_DONTNEED
+ MADV_FREE = C.MADV_FREE
SA_SIGINFO = C.SA_SIGINFO
SA_RESTART = C.SA_RESTART
madvdontneed: setting madvdontneed=0 will use MADV_FREE
instead of MADV_DONTNEED on Linux when returning memory to the
kernel. This is more efficient, but means RSS numbers will
- drop only when the OS is under memory pressure.
+ drop only when the OS is under memory pressure. On the BSDs and
+ Illumos/Solaris, setting madvdontneed=1 will use MADV_DONTNEED instead
+ of MADV_FREE. This is less efficient, but causes RSS numbers to drop
+ more quickly.
memprofilerate: setting memprofilerate=X will update the value of runtime.MemProfileRate.
When set to 0 memory profiling is disabled. Refer to the description of
}
func sysUnusedOS(v unsafe.Pointer, n uintptr) {
- madvise(v, n, _MADV_FREE)
+ if debug.madvdontneed != 0 {
+ madvise(v, n, _MADV_DONTNEED)
+ } else {
+ madvise(v, n, _MADV_FREE)
+ }
}
func sysUsedOS(v unsafe.Pointer, n uintptr) {