X-Git-Url: http://git.subgeniuskitty.com/surreal-numbers/.git/blobdiff_plain/c3b4805541f68c1dccc4e7007fdb7c828bb86f8f..8be725f2ca1fc13ac01f8f3a553e6a8803d08d91:/chapter-1-experiments/ch1-breeding-numbers.go diff --git a/chapter-1-experiments/ch1-breeding-numbers.go b/chapter-1-experiments/ch1-breeding-numbers.go index 58576cc..fc1c397 100644 --- a/chapter-1-experiments/ch1-breeding-numbers.go +++ b/chapter-1-experiments/ch1-breeding-numbers.go @@ -300,7 +300,11 @@ func main() { // right sets. This covers all the reduced form permutations. Any longer // permutations will be similar to one of the reduced forms. func permuteExistingNumbers(generation int, universe surrealUniverse) []surrealNumber { - var numbers []surrealNumber + // Profiling indicates that most calls to growSlice() and memMove() + // originate in this function. Allocating a sufficiently large slice + // upfront results in 2x speed improvement and 1/3 reduction in heap usage. + numberOfPermutations := ((universe.cardinality()+1) * (universe.cardinality()+1)) - 1 + numbers := make([]surrealNumber, 0, numberOfPermutations) // First build permutations with 1 element in each set. for i := 0; i < universe.cardinality(); i++ {