go4.org/unsafe/assume-no-moving-gc@v0.0.0-20231121144256-b99613f794b6/assume-no-moving-gc.go (about) 1 // Copyright 2020 Brad Fitzpatrick. 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 go4.org/unsafe/assume-no-moving-gc exists so you can depend 6 // on it from unsafe code that wants to declare that it assumes that 7 // the Go runtime does not use a moving garbage collector. Specifically, 8 // it asserts that the caller is playing stupid games with the addresses 9 // of heap-allocated values. It says nothing about values that Go's escape 10 // analysis keeps on the stack. Ensuring things aren't stack-allocated 11 // is the caller's responsibility. 12 // 13 // This package is then updated as needed for new Go versions when 14 // that is still the case and explodes at runtime with a failure 15 // otherwise, with the idea that it's better to not start at all than 16 // to silently corrupt your data at runtime. 17 // 18 // To use: 19 // 20 // import _ "go4.org/unsafe/assume-no-moving-gc" 21 // 22 // There is no API. 23 // 24 // As of Go 1.21, this package asks the Go runtime whether it can move 25 // heap objects around. If you get an error on versions prior to that, 26 // go get go4.org/unsafe/assume-no-moving-gc@latest and things will 27 // work. 28 // 29 // The GitHub repo is at https://github.com/go4org/unsafe-assume-no-moving-gc 30 package assume_no_moving_gc 31 32 const env = "ASSUME_NO_MOVING_GC_UNSAFE"