Rust VS C benchmarks

Current benchmark data was generated on Wed Feb 08 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz (Model 85)

* -m in a file name stands for multi-threading or multi-processing

* -i in a file name stands for direct intrinsics usage. (Usage of simd intrinsics via libraries is not counted)

* -ffi in a file name stands for non-stdlib FFI usage

* (You may find time < time(user) + time(sys) for some non-parallelized programs, the overhead is from GC or JIT compiler, which are allowed to take advantage of multi-cores as that's more close to real-world scenarios.)

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 5c-m.rs 212ms 1.9ms 1.7MB 370ms 7ms rustc 1.69.0-nightly
rust 5-m.rs 224ms 5.8ms 1.7MB 400ms 0ms rustc 1.67.0
rust 1c.rs 257ms 0.4ms 1.0MB 247ms 0ms rustc 1.69.0-nightly
rust 1.rs 314ms 1.1ms 1.0MB 307ms 0ms rustc 1.67.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1c.rs 29ms 0.8ms 1.0MB 20ms 0ms rustc 1.69.0-nightly
rust 5-m.rs 32ms 0.5ms 1.7MB 40ms 0ms rustc 1.67.0
rust 5c-m.rs 33ms 3.0ms 1.7MB 37ms 3ms rustc 1.69.0-nightly
rust 1.rs 35ms 2.0ms 1.0MB 23ms 0ms rustc 1.67.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 2.4ms 0.7ms 1.4MB 0ms 0ms clang 14.0.0
rust 1.rs 2.5ms 0.6ms 1.9MB 0ms 0ms rustc 1.67.0
rust 1.rs 2.6ms 0.8ms 1.0MB 0ms 0ms rustc 1.69.0-nightly
c 1.c 2.6ms 0.8ms 1.3MB 0ms 0ms gcc 12.2.0
c 1.c 3.4ms 2.1ms 1.0MB 0ms 0ms zigcc 0.11.0-dev.1580+a5b34a61a

mandelbrot

Input: 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 9.rs 435ms 4.1ms 4.9MB 423ms 0ms rustc 1.69.0-nightly
rust 8.rs 512ms 3.2ms 4.9MB 497ms 0ms rustc 1.67.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 9.rs 20ms 0.1ms 1.0MB 10ms 0ms rustc 1.69.0-nightly
rust 8.rs 25ms 1.2ms 1.0MB 13ms 0ms rustc 1.67.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 255ms 0.3ms 1.0MB 237ms 0ms rustc 1.67.0
c 8-i.c 331ms 4.8ms 1.2MB 320ms 0ms zigcc 0.11.0-dev.1580+a5b34a61a
rust 7-i.rs 376ms 6.0ms 1.0MB 363ms 0ms rustc 1.67.0
c 8-i.c 398ms 5.5ms 1.3MB 387ms 0ms gcc 12.2.0
c 5.c 403ms 1.6ms 1.3MB 390ms 0ms gcc 12.2.0
rust 3.rs 404ms 0.9ms 1.1MB 390ms 0ms rustc 1.69.0-nightly
c 5.c 422ms 5.1ms 1.4MB 410ms 0ms clang 14.0.0
c 8-i.c 423ms 7.5ms 1.4MB 410ms 0ms clang 14.0.0
c 5.c 426ms 3.6ms 1.0MB 413ms 0ms zigcc 0.11.0-dev.1580+a5b34a61a
c 2.c 433ms 1.0ms 1.2MB 420ms 0ms zigcc 0.11.0-dev.1580+a5b34a61a
rust 2.rs 446ms 30ms 1.1MB 433ms 0ms rustc 1.67.0
c 2.c 467ms 4.0ms 1.4MB 453ms 0ms clang 14.0.0
rust 1.rs 503ms 8.7ms 1.1MB 490ms 0ms rustc 1.67.0
c 2.c 592ms 1.5ms 1.3MB 580ms 0ms gcc 12.2.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4-i.rs 29ms 0.5ms 1.0MB 20ms 0ms rustc 1.67.0
c 8-i.c 37ms 1.3ms 1.3MB 27ms 0ms zigcc 0.11.0-dev.1580+a5b34a61a
rust 7-i.rs 41ms 0.3ms 1.0MB 30ms 0ms rustc 1.67.0
rust 3.rs 43ms 0.1ms 1.0MB 30ms 0ms rustc 1.69.0-nightly
c 8-i.c 43ms 1.7ms 1.3MB 30ms 0ms gcc 12.2.0
c 5.c 43ms 0.8ms 1.3MB 30ms 0ms gcc 12.2.0
c 5.c 45ms 1.0ms 1.4MB 37ms 0ms clang 14.0.0
c 8-i.c 45ms 0.2ms 1.4MB 30ms 0ms clang 14.0.0
rust 2.rs 45ms 0.5ms 1.0MB 37ms 0ms rustc 1.67.0
c 2.c 47ms 0.6ms 1.2MB 40ms 0ms zigcc 0.11.0-dev.1580+a5b34a61a
c 2.c 51ms 2.5ms 1.4MB 40ms 0ms clang 14.0.0
c 5.c 53ms 4.0ms 1.0MB 43ms 0ms zigcc 0.11.0-dev.1580+a5b34a61a
rust 1.rs 55ms 4.2ms 1.0MB 43ms 0ms rustc 1.67.0
c 2.c 63ms 0.8ms 1.3MB 50ms 0ms gcc 12.2.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 1083ms 2.6ms 2.5MB 2073ms 3ms rustc 1.69.0-nightly
rust 7-m.rs 1085ms 14ms 2.1MB 2083ms 0ms rustc 1.67.0
c 4-m.c 1534ms 9.7ms 1.3MB 2990ms 3ms gcc 12.2.0
c 6-im.c 1961ms 20ms 1.3MB 3820ms 0ms gcc 12.2.0
c 4-m.c 1986ms 14ms 5.2MB 3877ms 0ms clang 14.0.0
c 6-im.c 1990ms 12ms 3.2MB 3890ms 7ms clang 14.0.0
c 5-im.c 1998ms 19ms 1.3MB 3857ms 0ms gcc 12.2.0
rust 8.rs 2075ms 12ms 2.4MB 2067ms 0ms rustc 1.69.0-nightly
rust 7.rs 2099ms 40ms 2.2MB 2080ms 0ms rustc 1.67.0
rust 2-m.rs 2234ms 16ms 2.3MB 4307ms 3ms rustc 1.67.0
c 3-m.c 2263ms 5.2ms 3.2MB 4437ms 0ms clang 14.0.0
c 3-m.c 2269ms 18ms 1.3MB 4430ms 0ms gcc 12.2.0
c 5-im.c 2451ms 11ms 3.3MB 4797ms 0ms clang 14.0.0
rust 2.rs timeout 0.0ms 2.0MB 4987ms 0ms rustc 1.67.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7-m.rs 280ms 0.9ms 1.1MB 513ms 0ms rustc 1.67.0
rust 8-m.rs 280ms 2.6ms 2.2MB 510ms 0ms rustc 1.69.0-nightly
c 4-m.c 397ms 1.4ms 1.3MB 750ms 0ms gcc 12.2.0
c 6-im.c 469ms 3.9ms 1.3MB 893ms 0ms gcc 12.2.0
c 6-im.c 499ms 7.3ms 3.3MB 957ms 0ms clang 14.0.0
c 4-m.c 505ms 1.7ms 3.1MB 963ms 0ms clang 14.0.0
c 5-im.c 516ms 3.1ms 1.3MB 970ms 3ms gcc 12.2.0
rust 7.rs 523ms 1.8ms 1.1MB 510ms 0ms rustc 1.67.0
rust 2-m.rs 561ms 0.8ms 2.1MB 1063ms 0ms rustc 1.67.0
rust 8.rs 565ms 14ms 2.1MB 553ms 0ms rustc 1.69.0-nightly
c 3-m.c 581ms 4.7ms 1.3MB 1117ms 0ms gcc 12.2.0
c 3-m.c 588ms 9.4ms 3.1MB 1127ms 0ms clang 14.0.0
c 5-im.c 629ms 5.3ms 3.2MB 1200ms 3ms clang 14.0.0
rust 2.rs 1966ms 23ms 1.0MB 1950ms 0ms rustc 1.67.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 8-m.rs 77ms 1.9ms 1.1MB 127ms 0ms rustc 1.69.0-nightly
rust 7-m.rs 79ms 1.6ms 1.0MB 123ms 0ms rustc 1.67.0
c 4-m.c 111ms 3.3ms 1.3MB 193ms 0ms gcc 12.2.0
c 6-im.c 127ms 1.0ms 1.3MB 223ms 0ms gcc 12.2.0
c 4-m.c 136ms 1.4ms 3.3MB 240ms 0ms clang 14.0.0
rust 8.rs 137ms 2.1ms 1.1MB 123ms 0ms rustc 1.69.0-nightly
rust 7.rs 138ms 2.1ms 1.1MB 130ms 0ms rustc 1.67.0
c 6-im.c 138ms 0.8ms 3.2MB 250ms 0ms clang 14.0.0
c 5-im.c 140ms 2.7ms 1.3MB 250ms 0ms gcc 12.2.0
rust 2-m.rs 151ms 2.4ms 1.0MB 267ms 0ms rustc 1.67.0
c 3-m.c 158ms 1.8ms 3.5MB 283ms 0ms clang 14.0.0
c 3-m.c 162ms 8.8ms 1.3MB 287ms 0ms gcc 12.2.0
c 5-im.c 173ms 6.0ms 3.3MB 300ms 3ms clang 14.0.0
rust 2.rs 491ms 0.1ms 1.0MB 480ms 0ms rustc 1.67.0

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4.rs 2015ms 13ms 33.7MB 1983ms 13ms rustc 1.67.0
rust 5.rs 2208ms 16ms 33.7MB 2180ms 13ms rustc 1.67.0
rust 3.rs 2379ms 46ms 49.8MB 2343ms 17ms rustc 1.67.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 4.rs 179ms 1.1ms 5.7MB 170ms 0ms rustc 1.67.0
rust 5.rs 200ms 2.5ms 5.8MB 183ms 0ms rustc 1.67.0
rust 3.rs 211ms 2.3ms 7.7MB 190ms 0ms rustc 1.67.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 1161ms 4.4ms 6.2MB 2220ms 23ms rustc 1.67.0
rust 5-m.rs 1222ms 11ms 4.4MB 2347ms 30ms rustc 1.67.0
rust 3.rs 2254ms 3.6ms 6.2MB 2200ms 37ms rustc 1.67.0
rust 4.rs 3557ms 11ms 4.5MB 3540ms 0ms rustc 1.67.0
rust 1-m.rs 3918ms 52ms 4.9MB 7567ms 110ms rustc 1.67.0

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-m.rs 105ms 17ms 2.9MB 173ms 7ms rustc 1.67.0
rust 3.rs 140ms 0.7ms 3.2MB 127ms 0ms rustc 1.67.0
rust 5-m.rs 141ms 26ms 2.7MB 243ms 7ms rustc 1.67.0
rust 4.rs 235ms 1.7ms 2.3MB 223ms 0ms rustc 1.67.0
rust 1-m.rs 271ms 6.3ms 2.9MB 480ms 13ms rustc 1.67.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 165ms 0.5ms 3.6MB 150ms 0ms rustc 1.67.0
rust 2.rs 685ms 1.5ms 3.8MB 673ms 0ms rustc 1.67.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 46ms 0.8ms 2.9MB 37ms 0ms rustc 1.67.0
rust 2.rs 133ms 0.6ms 3.1MB 120ms 0ms rustc 1.67.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 750ms 1.1ms 1.0MB 1453ms 0ms rustc 1.67.0
rust 2-im.rs 1071ms 12ms 1.0MB 2070ms 0ms rustc 1.67.0
rust 5-m.rs 1427ms 22ms 1.1MB 2730ms 0ms rustc 1.67.0
rust 3-i.rs 1492ms 23ms 1.0MB 1473ms 0ms rustc 1.67.0
rust 2-i.rs 2205ms 4.9ms 1.0MB 2193ms 0ms rustc 1.67.0
rust 1-m.rs 2866ms 4.7ms 1.0MB 5527ms 0ms rustc 1.67.0
rust 1.rs 4707ms 34ms 1.0MB 4693ms 0ms rustc 1.67.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 3-im.rs 70ms 0.7ms 1.0MB 117ms 0ms rustc 1.67.0
rust 2-im.rs 100ms 3.0ms 1.1MB 170ms 0ms rustc 1.67.0
rust 5-m.rs 125ms 1.7ms 1.0MB 220ms 0ms rustc 1.67.0
rust 3-i.rs 126ms 0.8ms 1.1MB 117ms 0ms rustc 1.67.0
rust 2-i.rs 191ms 8.6ms 1.1MB 183ms 0ms rustc 1.67.0
rust 1-m.rs 258ms 4.6ms 1.1MB 453ms 3ms rustc 1.67.0
rust 1.rs 394ms 1.2ms 1.1MB 383ms 0ms rustc 1.67.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 180ms 40ms 31.1MB 103ms 113ms rustc 1.67.0
rust 2-http2.rs 476ms 145ms 45.3MB 680ms 150ms rustc 1.67.0
rust 2-m.rs 614ms 14ms 105.6MB 340ms 603ms rustc 1.67.0
rust 1-http2.rs 1093ms 130ms 68.5MB 1283ms 613ms rustc 1.67.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 65ms 31ms 14.1MB 10ms 40ms rustc 1.67.0
rust 2.rs 137ms 5.4ms 22.4MB 30ms 107ms rustc 1.67.0
rust 2-http2.rs 353ms 76ms 22.7MB 487ms 107ms rustc 1.67.0
rust 1-http2.rs 457ms 18ms 25.5MB 650ms 127ms rustc 1.67.0

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 96ms 3.0ms 38.1MB 70ms 10ms rustc 1.67.0
rust 3.rs 96ms 2.4ms 36.2MB 73ms 10ms rustc 1.67.0
rust 1.rs 154ms 1.7ms 75.4MB 100ms 40ms rustc 1.67.0

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 598ms 0.3ms 257.9MB 460ms 120ms rustc 1.67.0
rust 3.rs 611ms 20ms 258.6MB 460ms 137ms rustc 1.67.0
rust 1.rs 1117ms 11ms 605.2MB 760ms 340ms rustc 1.67.0

knucleotide

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1-m.c 292ms 5.8ms 23.5MB 480ms 13ms gcc 12.2.0
rust 8-m.rs 422ms 12ms 28.2MB 733ms 17ms rustc 1.67.0
c 1-m.c 581ms 11ms 20.5MB 977ms 23ms clang 14.0.0
rust 8.rs 743ms 40ms 23.3MB 710ms 13ms rustc 1.67.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
c 1.c 43ms 1.2ms 13.6MB 53ms 7ms gcc 12.2.0
rust 8-m.rs 57ms 1.0ms 15.7MB 77ms 3ms rustc 1.67.0
c 1-m.c 71ms 3.2ms 9.7MB 113ms 0ms clang 14.0.0
rust 8.rs 88ms 3.3ms 11.6MB 70ms 7ms rustc 1.67.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 65ms 6.5ms 1.8MB 57ms 0ms rustc 1.67.0
rust 1.rs 90ms 3.6ms 2.1MB 80ms 0ms rustc 1.67.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 258ms 14ms 1.1MB 243ms 0ms rustc 1.67.0
rust 1.rs 369ms 2.5ms 1.0MB 360ms 0ms rustc 1.67.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0-unsafe.rs 40ms 2.7ms 1.1MB 30ms 0ms rustc 1.67.0
rust 1.rs 60ms 1.7ms 1.0MB 50ms 0ms rustc 1.67.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 1082ms 5.4ms 33.7MB 1050ms 17ms rustc 1.67.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 226ms 4.6ms 9.9MB 207ms 0ms rustc 1.67.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 497ms 1.2ms 6.6MB 480ms 0ms rustc 1.67.0
rust 1.rs 1080ms 27ms 40.8MB 1050ms 13ms rustc 1.67.0
c 1.c 1081ms 39ms 40.2MB 1043ms 23ms zigcc 0.11.0-dev.1580+a5b34a61a
c 1.c 1125ms 33ms 41.0MB 1087ms 17ms gcc 12.2.0
c 1.c 1130ms 22ms 40.9MB 1090ms 27ms clang 14.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 111ms 0.5ms 3.1MB 100ms 0ms rustc 1.67.0
c 1.c 128ms 0.8ms 11.0MB 117ms 0ms zigcc 0.11.0-dev.1580+a5b34a61a
c 1.c 143ms 6.8ms 11.7MB 127ms 0ms clang 14.0.0
c 1.c 146ms 0.9ms 11.7MB 130ms 0ms gcc 12.2.0
rust 1.rs 147ms 6.8ms 11.6MB 133ms 0ms rustc 1.67.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 2.rs 1979ms 8.1ms 2.7MB 1890ms 73ms rustc 1.67.0
rust 1.rs 2064ms 22ms 2.8MB 1870ms 173ms rustc 1.67.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 1.rs 441ms 3.4ms 2.4MB 423ms 0ms rustc 1.67.0
rust 2.rs 459ms 11ms 2.5MB 447ms 0ms rustc 1.67.0

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7.rs 672ms 6.4ms 77.6MB 867ms 30ms rustc 1.67.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 7.rs 74ms 3.0ms 11.6MB 87ms 0ms rustc 1.67.0

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0.rs 164ms 0.4ms 1.1MB 153ms 0ms rustc 1.67.0
rust 1.rs 2258ms 26ms 1.1MB 2243ms 0ms rustc 1.67.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
rust 0.rs 45ms 1.5ms 1.1MB 33ms 0ms rustc 1.67.0
rust 1.rs 559ms 2.7ms 1.1MB 550ms 0ms rustc 1.67.0