我试图在Github中使用这个包进行字符串匹配。我的字典是 4 MB。创建 Trie 时,我得到了fatal error: runtime: out of memory. 我正在使用具有 8 GB RAM 和 Golang 版本 1.4.2 的 Ubuntu 14.04。


似乎错误来自第 99 行(现在):m.trie = make([]node, max)


程序停在这一行。


这是错误:


fatal error: runtime: out of memory


runtime stack:

runtime.SysMap(0xc209cd0000, 0x3b1bc0000, 0x570a00, 0x5783f8)

    /usr/local/go/src/runtime/mem_linux.c:149 +0x98

runtime.MHeap_SysAlloc(0x57dae0, 0x3b1bc0000, 0x4296f2)

    /usr/local/go/src/runtime/malloc.c:284 +0x124

runtime.MHeap_Alloc(0x57dae0, 0x1d8dda, 0x10100000000, 0x8)

    /usr/local/go/src/runtime/mheap.c:240 +0x66


goroutine 1 [running]:

runtime.switchtoM()

    /usr/local/go/src/runtime/asm_amd64.s:198 fp=0xc208518a60 sp=0xc208518a58

runtime.mallocgc(0x3b1bb25f0, 0x4d7fc0, 0x0, 0xc20803c0d0)

    /usr/local/go/src/runtime/malloc.go:199 +0x9f3 fp=0xc208518b10 sp=0xc208518a60

runtime.newarray(0x4d7fc0, 0x3a164e, 0x1)

    /usr/local/go/src/runtime/malloc.go:365 +0xc1 fp=0xc208518b48 sp=0xc208518b10

runtime.makeslice(0x4a52a0, 0x3a164e, 0x3a164e, 0x0, 0x0, 0x0)

    /usr/local/go/src/runtime/slice.go:32 +0x15c fp=0xc208518b90 sp=0xc208518b48

github.com/mf/ahocorasick.(*Matcher).buildTrie(0xc2083c7e60, 0xc209860000, 0x26afb, 0x2f555)

    /home/go/ahocorasick/ahocorasick.go:104 +0x28b fp=0xc208518d90 sp=0xc208518b90

github.com/mf/ahocorasick.NewStringMatcher(0xc208bd0000, 0x26afb, 0x2d600, 0x8)

    /home/go/ahocorasick/ahocorasick.go:222 +0x34b fp=0xc208518ec0 sp=0xc208518d90

main.main()

这是 main 函数的内容(取自同一个 repo:test 文件)


var dictionary = InitDictionary()   

var bytes = []byte(""Partial invoice (€100,000, so roughly 40%) for the consignment C27655 we shipped on 15th August to London from the Make Believe Town depot. INV2345 is for the balance.. Customer contact (Sigourney) says they will pay this on the usual credit terms (30 days).")   


var precomputed = ahocorasick.NewStringMatcher(dictionary)// line 66 here

fmt.Println(precomputed.Match(bytes))