Created
July 17, 2020 09:31
-
-
Save algon-320/8f57187bdf88602e9b21c0fa4a1c04a9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ ../install/bin/ruby ../test.rb | |
push / pop: | |
user system total real | |
Deque push 0.006660 0.000000 0.006660 ( 0.006663) | |
Array push 0.007511 0.000000 0.007511 ( 0.007562) | |
Deque pop 0.005977 0.000034 0.006011 ( 0.006018) | |
Array pop 0.006018 0.000000 0.006018 ( 0.006022) | |
Deque push (and write) 0.010819 0.000078 0.010897 ( 0.010912) | |
Array push (and write) 0.010133 0.000000 0.010133 ( 0.010138) | |
unshift / sfhit: | |
user system total real | |
Deque unshift 0.002545 0.003686 0.006231 ( 0.006237) | |
Array unshift 0.006667 0.000278 0.006945 ( 0.006951) | |
Deque shift 0.005625 0.000000 0.005625 ( 0.005631) | |
Array shift 0.006660 0.000027 0.006687 ( 0.006696) | |
Deque unshift (and write) 0.011488 0.000000 0.011488 ( 0.011490) | |
Array unshift (and write) 2.666406 0.000000 2.666406 ( 2.666451) | |
random access: | |
user system total real | |
Deque 0.007795 0.000000 0.007795 ( 0.007796) | |
Array 0.005829 0.000000 0.005829 ( 0.005832) | |
-------- | |
small containers: | |
Calculating ------------------------------------- | |
Deque 592.000 memsize ( 0.000 retained) | |
1.000 objects ( 0.000 retained) | |
0.000 strings ( 0.000 retained) | |
Array 120.000 memsize ( 0.000 retained) | |
1.000 objects ( 0.000 retained) | |
0.000 strings ( 0.000 retained) | |
Comparison: | |
Array: 120 allocated | |
Deque: 592 allocated - 4.93x more | |
large containers: | |
Calculating ------------------------------------- | |
Deque 81.712k memsize ( 0.000 retained) | |
1.000 objects ( 0.000 retained) | |
0.000 strings ( 0.000 retained) | |
Array 80.040k memsize ( 0.000 retained) | |
1.000 objects ( 0.000 retained) | |
0.000 strings ( 0.000 retained) | |
Comparison: | |
Array: 80040 allocated | |
Deque: 81712 allocated - 1.02x more | |
push: | |
Calculating ------------------------------------- | |
Deque 825.456k memsize ( 825.416k retained) | |
2.000 objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Array 1.022M memsize ( 1.022M retained) | |
2.000 objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Comparison: | |
Deque: 825456 allocated | |
Array: 1021632 allocated - 1.24x more | |
unshift: | |
Calculating ------------------------------------- | |
Deque 825.456k memsize ( 825.416k retained) | |
2.000 objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Array 80.000 memsize ( 40.000 retained) | |
2.000 objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Comparison: | |
Array: 80 allocated | |
Deque: 825456 allocated - 10318.20x more | |
pop: | |
Calculating ------------------------------------- | |
Deque 13.128k memsize ( 13.088k retained) | |
2.000 objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Array 208.000 memsize ( 168.000 retained) | |
2.000 objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Comparison: | |
Array: 208 allocated | |
Deque: 13128 allocated - 63.12x more | |
shift: | |
Calculating ------------------------------------- | |
Deque 13.128k memsize ( 13.088k retained) | |
2.000 objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Array 80.000 memsize ( 40.000 retained) | |
2.000 objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Comparison: | |
Array: 80 allocated | |
Deque: 13128 allocated - 164.10x more | |
push and write: | |
Calculating ------------------------------------- | |
Deque 825.456k memsize ( 825.416k retained) | |
2.000 objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Array 634.440M memsize ( 1.022M retained) | |
199.913k objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Comparison: | |
Deque: 825456 allocated | |
Array: 634440456 allocated - 768.59x more | |
unshift and write: | |
Calculating ------------------------------------- | |
Deque 825.456k memsize ( 825.416k retained) | |
2.000 objects ( 1.000 retained) | |
0.000 strings ( 0.000 retained) | |
Array 633.419M memsize ( 12.584k retained) | |
199.913k objects ( 2.000 retained) | |
0.000 strings ( 0.000 retained) | |
Comparison: | |
Deque: 825456 allocated | |
Array: 633418904 allocated - 767.36x more |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'benchmark' | |
require "benchmark/memory" | |
N = 10 ** 5 | |
puts | |
puts "push / pop:" | |
deq = Deque.new | |
ary = Array.new | |
Benchmark.bm { |x| | |
x.report("Deque push") { for i in 1..N do deq.push(i) end } | |
x.report("Array push") { for i in 1..N do ary.push(i) end } | |
x.report("Deque pop") { for i in 1..N do deq.pop end } | |
x.report("Array pop") { for i in 1..N do ary.pop end } | |
x.report("Deque push (and write)") { for i in 1..N do deq.push(i); deq[-1] *= 2 end } | |
x.report("Array push (and write)") { for i in 1..N do ary.push(i); ary[-1] *= 2 end } | |
} | |
puts | |
puts "unshift / sfhit:" | |
deq = Deque.new | |
ary = Array.new | |
Benchmark.bm { |x| | |
x.report("Deque unshift") { for i in 1..N do deq.unshift(i) end } | |
x.report("Array unshift") { for i in 1..N do ary.unshift(i) end } | |
x.report("Deque shift") { for i in 1..N do deq.shift end } | |
x.report("Array shift") { for i in 1..N do ary.shift end } | |
x.report("Deque unshift (and write)") { for i in 1..N do deq.unshift(i); deq[0] *= 2 end } | |
x.report("Array unshift (and write)") { for i in 1..N do ary.unshift(i); ary[0] *= 2 end } | |
} | |
puts | |
puts "random access:" | |
size = 10 ** 5 | |
deq = Deque.new(size, 1) | |
ary = Array.new(size, 1) | |
idx = [] | |
for i in 1..N do | |
idx.push(rand(size)) | |
end | |
Benchmark.bm { |x| | |
x.report("Deque") { for i in idx do deq[i] end } | |
x.report("Array") { for i in idx do ary[i] end } | |
} | |
puts | |
puts "--------" | |
puts "small containers:" | |
Benchmark.memory { |x| | |
x.report("Deque") { Deque.new(10) } | |
x.report("Array") { Array.new(10) } | |
x.compare! | |
} | |
puts "large containers:" | |
Benchmark.memory { |x| | |
x.report("Deque") { Deque.new(10000) } | |
x.report("Array") { Array.new(10000) } | |
x.compare! | |
} | |
puts "push:" | |
Benchmark.memory { |x| | |
x.report("Deque") { | |
deq = Deque.new | |
for i in 1..N do deq.push(i) end | |
} | |
x.report("Array") { | |
ary = Array.new | |
for i in 1..N do ary.push(i) end | |
} | |
x.compare! | |
} | |
puts "unshift:" | |
Benchmark.memory { |x| | |
x.report("Deque") { | |
deq = Deque.new | |
for i in 1..N do deq.unshift(i) end | |
} | |
x.report("Array") { | |
ary = Array.new | |
for i in 1..N do ary.unshift(i) end | |
} | |
x.compare! | |
} | |
puts "pop:" | |
Benchmark.memory { |x| | |
x.report("Deque") { | |
deq = Deque.new(N) | |
for i in 1..N do deq.pop end | |
} | |
x.report("Array") { | |
ary = Array.new(N) | |
for i in 1..N do ary.pop end | |
} | |
x.compare! | |
} | |
puts "shift:" | |
Benchmark.memory { |x| | |
x.report("Deque") { | |
deq = Deque.new(N) | |
for i in 1..N do deq.shift end | |
} | |
x.report("Array") { | |
ary = Array.new(N) | |
for i in 1..N do ary.shift end | |
} | |
x.compare! | |
} | |
puts "push and write:" | |
Benchmark.memory { |x| | |
x.report("Deque") { | |
deq = Deque.new | |
for i in 1..N do deq.push(i); deq[-1] *= 2 end | |
} | |
x.report("Array") { | |
ary = Array.new | |
for i in 1..N do ary.push(i); deq[-1] *= 2 end | |
} | |
x.compare! | |
} | |
puts "unshift and write:" | |
Benchmark.memory { |x| | |
x.report("Deque") { | |
deq = Deque.new | |
for i in 1..N do deq.unshift(i); deq[0] *= 2 end | |
} | |
x.report("Array") { | |
ary = Array.new | |
for i in 1..N do ary.unshift(i); deq[0] *= 2 end | |
} | |
x.compare! | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment