No sorry - I think I did not do it right. I am supposed to allocate the slice with "slice.Bytes.Get(515).(*[]byte)" not "make([]byte, 515)"
In which case I still don't know why it's eating up my mem... :) On Wednesday, May 3, 2017 at 6:28:20 PM UTC+2, Piotr Narewski wrote: > > Thanks. > > I've checked it and I think there is something wrong with this lib. > > If I do: > dat := make([]byte, 515) > slice.Bytes.Put(&dat) > println(dat) > > And then: > p := slice.Bytes.Get(515).(*[]byte) > println(*p) > > It returns me a different slice. > > To get the same slice, I need to go down from 515 to 512 bytes: > p := slice.Bytes.Get(512).(*[]byte) > println(*p) > > This is pretty much similar for any other length value: put 111 needs get > 64, put 10000 needs 8192, etc. > That's where I think it's eating up the mem. > It just won't reuse a buffer of the same size. > > > > On Wednesday, May 3, 2017 at 4:42:28 PM UTC+2, Jan Mercl wrote: >> >> On Wed, May 3, 2017 at 4:24 PM Piotr Narewski <piot...@gmail.com> wrote: >> >> > I've just tried it and unfortunately it doesn't seem to be better than >> the traditional approach. >> > >> > With the pool in place, it still user too much memory (unlike my >> solution with using a heap via glibc). >> >> Sorry to hear that. There are few things worth checking: >> >> - slice.Put must be called once the slice will be no more used. >> - The program may not keep any references to the slice passed to >> slice.Put. >> - If you use append on the slice returned from slice.Get() you will >> effectively stop using the pool as append can allocate a new backing array >> but not by calling slice.Get/CGet. IOW, in such cases it's also necessary >> to write one's own append ;-) >> >> The best way to figure out where the memory consumption is happening when >> using slice.Pool is to profile it, example: >> >> $ go test -run @ -bench . -memprofile mem.out -memprofilerate 1 >> $ go tool pprof -lines -web -alloc_space *.test mem.out >> >> -- >> >> -j >> > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.