title: Golang : fatal error: runtime: out of memory
body: <p>I trying to use this package in <a href="https://github.com/cloudflare/ahocorasick/blob/master/ahocorasick.go" rel="nofollow">Github</a> for string matching. My dictionary is 4 MB. When creating the Trie, I got <code>fatal error: runtime: out of memory</code>. I am using Ubuntu 14.04 with 8 GB of RAM and Golang version 1.4.2.</p>
  
  <p>It seems the error come from the line 99 (now) <a href="https://github.com/cloudflare/ahocorasick/blob/master/ahocorasick.go" rel="nofollow">here</a> : <code>m.trie = make([]node, max)</code></p>
  
  <p>The program stops at this line.</p>
  
  <p>This is the error:</p>
  
  <pre><code>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()
      /home/go/seme/substrings.go:66 +0x257 fp=0xc208518f98 sp=0xc208518ec0
  runtime.main()
      /usr/local/go/src/runtime/proc.go:63 +0xf3 fp=0xc208518fe0 sp=0xc208518f98
  runtime.goexit()
      /usr/local/go/src/runtime/asm_amd64.s:2232 +0x1 fp=0xc208518fe8 sp=0xc208518fe0
  exit status 2
  </code></pre>
  
  <p>This is the content of the main function (taken from the same repo: test file)</p>
  
  <pre><code>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))
  </code></pre>