FastStack
August 14, 2016 ยท View on GitHub
FastStack is dynamically resizable data structure optimized for fast iteration over the large arrays of similar elements avoiding memory fragmentation (e.g., update and rendering cycles of a game scene).
Tools
bench_int - Benchmark with int elements (low memory fragmentation case)
bench_ptr - Benchmark with ptr elements (high memory fragmentation case)
(using nimbench)
test - Unit testing suite (using unittest)
Benchmark (int)
type
Elem = ref object of RootObj
data: int
Comparing to seq and DoublyLinkedList on i5-2500K @ 4000MHz:
============================================================================
GlobalBenchmark relative time/iter iters/s
============================================================================
GlobalBenchmark 249.31ps 4.01G
============================================================================
bench_int.nim relative time/iter iters/s
============================================================================
Sequence 108.55us 9.21K
List 545.62us 1.83K
FastStack 115.65us 8.65K
- Seq: 100.00%
- List: 19.87%
- FastStack: 93.92%

Benchmark (ptr)
type
Elem = ref object of RootObj
data: pointer
Comparing to seq and DoublyLinkedList on i5-2500K @ 4000MHz:
============================================================================
GlobalBenchmark relative time/iter iters/s
============================================================================
GlobalBenchmark 249.31ps 4.01G
============================================================================
bench_ptr.nim relative time/iter iters/s
============================================================================
Sequence 1.65ms 607.54
List 2.21ms 452.28
FastStack 1.38ms 724.24
- Seq: 100.00%
- List: 74.44%
- FastStack: 119.21%
