golang.org/x/text/unicode/norm包在其init函数中分配了21.47kB的内存,无论该包是否被使用。
我们应该像在e.g. https://go-review.googlesource.com/c/net/+/127275和https://go-review.googlesource.com/c/go/+/127075中那样懒惰地执行此操作。
这将有助于那些明确导入它的人(或者通过golang.org/x/net/http2导入它),因为那时,std-vendored副本就不需要再分配20KB的内存了。
也许其中的一些表也应该是const字符串,这样链接器就可以将其放在只读部分。然后我们可以在运行时对其进行切片以获取整数。
/cc @mpvl
7条答案
按热度按时间yshpjwxd1#
CC @mpvl
lf5gs5x22#
将要尝试一下这个!
7cwmlq893#
https://golang.org/cl/127924提到了这个问题:
unicode/norm: lazy load decomps table
insrf1ej4#
https://golang.org/cl/127926提到了这个问题:
make recompMap a string
b4wnujal5#
是否有办法生成所有Unicode版本的表格?如果我运行"go generate",它只生成当前Go版本的表格。
另外,你是如何检查init函数的内存分配的?如果我只是进行一个空白导入并运行内存分析器,什么都不会被捕捉到。
lstz6jyr6#
请查看#26775和https://twitter.com/bradfitz/status/1024726819725950976的顶部评论。
kyvafyod7#
https://golang.org/cl/207017提到了这个问题:
unicode/norm: make decomps to a const string