use allocators, now performance is only half-bad without GC influence