Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.Sign up
x/text/unicode/norm: reduce init-time memory usage #26752
The golang.org/x/text/unicode/norm package allocs 21.47kB in its init function, regardless of whether the package is ever used.
This would help people who explicitly import it (or import it via golang.org/x/net/http2), as then the std-vendored copy would not need to also allocate the 20KB.
Perhaps some of those tables should be const strings, too, so the linker can put it in read-only sections. Then we can slice into it at runtime to get integers out.
recompMap gets populated on init, which requires 21kB of memory. Instead populate it only when we need it. This will put it in the rodata section of the binary, which means that the Go compiler can apply better optimizations to it. The string is an alternating series of 4 byte keys and 4 byte values, which get built into a map the first time they are required. Updates golang/go#26752. Change-Id: I4f9b7d74af6df42b58999cf42cf5ada9646aa98d Reviewed-on: https://go-review.googlesource.com/127926 Run-TryBot: Brad Fitzpatrick <firstname.lastname@example.org> TryBot-Result: Gobot Gobot <email@example.com> Reviewed-by: Brad Fitzpatrick <firstname.lastname@example.org>
Is there a way to generate the tables for all unicode versions ? If I run "go generate", it only generates the tables for the current Go version.
Also, how are you checking the memory allocation of the init function ? If I just do a blank import and run a mem profile, nothing gets caught.