Thank you so much, that solved our problem! :D
On Sunday, May 14, 2017 at 4:06:12 PM UTC-4, Kale B wrote: > > There's a finalizer being set on `*gmp.Int` when `SetString()` is called. > Since `newnum` is a `gmp.Int` and not a `*gmp.Int` and `newnum` is copied > into `output_array`, the pointer with the finalizer set on it is no longer > referenced and the finalizer is eligible to be run when the next GC occurs. > > If you put a manual call to `runtime.GC()` in the loop the issue presents > itself much more quickly. > > The issue does not occur if you avoid copying `newnum` by storing pointers > in the slice. https://play.golang.org/p/l7kXpxArc1 > > On Sun, May 14, 2017 at 12:20 PM, <[email protected] <javascript:>> > wrote: > >> Here is a test case below. >> >> In short, it's appending the same number to an array, but after 2500 >> loops or so the value changes. >> >> package main >> import ( >> "fmt" >> "github.com/ncw/gmp" >> // "math/big" >> ) >> func test_gmp_array() { >> index := 0 >> output_array := []gmp.Int{} >> for index < 5000 { >> var newnum gmp.Int >> >> newnum.SetString("27928410756179523138881080989986005991789933932188228018115755918494634799929873910027825747854697455979387110847058629350347288500624884424807086906801594642406392448568530327829083514883524712985492538589993807582131300292739787897589360129490451849769622648595726892334513355855504557741514903175075958458960111055024641406976670602678887952234068019841236549447926340755063903373950684252611325596552928912480285833159841819645546289989159869982214159616531691638376958340264087137749469269647555189450117026947774590910035240238694361652478067361121651905941283054193444516391789652433009672685099320489013369511", >> 10) >> output_array = append(output_array, newnum) >> fmt.Println("array_size: ", len(output_array)) >> fmt.Println(&output_array[0]) >> index += 1 >> } >> } >> >> func main() { >> test_gmp_array(); >> } >> >> >> On Sunday, May 14, 2017 at 7:53:51 AM UTC-4, Damian Gryski wrote: >>> >>> >>> >>> On Sunday, May 14, 2017 at 4:01:26 AM UTC+2, Elise Xue wrote: >>>> >>>> We're using gmp (library found at https://github.com/ncw/gmp) to run >>>> on large inputs, and we have arrays with thousands of elements at a time >>>> in >>>> our code. When we write these arrays to files, we find that the values of >>>> some of the elements have changed. >>>> >>>> >>>> We tested our by code by reading in an input file of large numbers, >>>> casting them to gmp.Int, storing them in an array, and writing them to an >>>> output file. This works for an array of ~1400 numbers, but if the array >>>> gets any larger than that the values in the array change. >>>> >>>> Below we print the first element of our array each time a new element >>>> gets appended. As the size goes past 1435, the value of the first value >>>> changes, and it changes again when the size goes past 1437: >>>> >>>> >>>> >>> Can you provide example code that demonstrates the issue? >>> >>> Damian >>> >> -- >> 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 [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
