memx

memory functions like a libc memcmp(), memchr(), memmem(), memcpy(), memset()

Features

Todo

Benchmark

| name | gnu:en | gnu:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemchr | 369.320 us | 175.200 us | 367.500 us | 174.240 us | | memxmemchr | 257.810 us | 82.803 us | 262.850 us | 82.090 us | | memxmemchrbasic | 260.680 us | 93.369 us | 263.890 us | 93.209 us | | memxmemchrlibc | 290.900 us | 83.691 us | 616.360 us | 203.530 us | | memchr_memchr | 222.060 us | 65.809 us | 225.610 us | 64.784 us |

| name | bench:en | bench:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemcmp | 256.250 uc | 335.030 uc | 417.780 uc | 372.920 uc | | memxmemcmp | 245.860 uc | 308.080 uc | 236.750 uc | 301.260 uc | | memxmemcmpbasic | 233.880 uc | 282.990 uc | 240.250 uc | 283.920 uc | | memxmemcmplibc | 350.370 uc | 425.330 uc | 485.850 uc | 579.300 uc |

| name | bench:en | bench:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemcpy | 246.550 uc | 437.850 uc | 638.930 uc | 1145.800 uc | | memxmemcpy | 332.360 uc | 466.830 uc | 329.470 uc | 471.780 uc | | memxmemcpybasic | 332.210 uc | 467.190 uc | 329.580 uc | 472.080 uc | | memxmemcpylibc | 288.240 uc | 504.140 uc | 675.400 uc | 1214.300 uc |

| name | gnu:en | gnu:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemeq | 275.290 us | 325.640 us | 428.130 us | 380.860 us | | memxmemeq | 192.310 us | 248.040 us | 186.260 us | 249.310 us | | memxmemeqbasic | 192.140 us | 247.650 us | 186.200 us | 248.890 us | | memxmemeqlibc | 334.610 us | 398.930 us | 482.210 us | 543.460 us |

| name | bench:en | bench:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemmem | 514.280 uc | 456.430 uc | 510.550 uc | 472.260 uc | | memxmemmem | 114.860 uc | 114.660 uc | 116.720 uc | 116.660 uc | | memxmemmembasic | 115.220 uc | 115.490 uc | 115.990 uc | 116.610 uc | | memxmemmemlibc | 132.520 uc | 122.250 uc | 220.890 uc | 276.960 uc | | memchr_memmem | 185.760 uc | 209.940 uc | 194.000 uc | 222.120 uc |

| name | bench:en | bench:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemset | 1.695 uc | 3.686 uc | 1.481 uc | 3.314 uc | | memxmemset | 1.959 uc | 4.107 uc | 1.743 uc | 3.670 uc | | memxmemsetbasic | 2.889 uc | 5.146 uc | 2.896 uc | 5.245 uc | | memxmemsetlibc | 1.857 uc | 3.901 uc | 1.659 uc | 3.544 uc |

  1. i686:

| name | gnu:en | gnu:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemchr | 335.730 us | 173.060 us | 333.950 us | 172.740 us | | memxmemchr | 285.690 us | 89.645 us | 294.270 us | 92.383 us | | memxmemchrbasic | 291.360 us | 132.090 us | 316.710 us | 137.620 us | | memxmemchrlibc | 371.590 us | 97.953 us | 591.740 us | 164.630 us | | memchr_memchr | 493.090 us | 196.520 us | 518.660 us | 200.080 us |

| name | bench:en | bench:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemcmp | 266.600 uc | 365.520 uc | 557.240 uc | 530.380 uc | | memxmemcmp | 315.770 uc | 371.150 uc | 324.900 uc | 422.970 uc | | memxmemcmpbasic | 327.260 uc | 371.040 uc | 321.080 uc | 399.910 uc | | memxmemcmplibc | 391.420 uc | 526.450 uc | 666.070 uc | 739.410 uc |

| name | bench:en | bench:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemcpy | 323.310 uc | 586.280 uc | 418.100 uc | 745.570 uc | | memxmemcpy | 435.160 uc | 830.570 uc | 363.750 uc | 810.380 uc | | memxmemcpybasic | 436.470 uc | 831.460 uc | 363.070 uc | 809.770 uc | | memxmemcpylibc | 389.430 uc | 741.410 uc | 494.500 uc | 890.600 uc |

| name | gnu:en | gnu:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemeq | 280.420 us | 350.530 us | 626.070 us | 651.890 us | | memxmemeq | 301.310 us | 358.370 us | 316.790 us | 371.520 us | | memxmemeqbasic | 306.400 us | 355.980 us | 313.500 us | 358.960 us | | memxmemeqlibc | 366.260 us | 477.360 us | 707.470 us | 838.500 us |

| name | bench:en | bench:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemmem | 692.010 uc | 558.620 uc | 724.800 uc | 590.770 uc | | memxmemmem | 138.470 uc | 135.850 uc | 136.450 uc | 136.980 uc | | memxmemmembasic | 139.030 uc | 135.280 uc | 137.430 uc | 137.520 uc | | memxmemmemlibc | 185.490 uc | 172.060 uc | 247.830 uc | 258.750 uc | | memchr_memmem | 473.520 uc | 487.570 uc | 506.670 uc | 492.670 uc |

| name | bench:en | bench:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemset | 1.355 uc | 2.755 uc | 2.510 uc | 4.622 uc | | memxmemset | 1.498 uc | 3.117 uc | 2.618 uc | 4.808 uc | | memxmemsetbasic | 2.922 uc | 5.265 uc | 2.980 uc | 5.367 uc | | memxmemsetlibc | 1.398 uc | 2.926 uc | 2.651 uc | 4.812 uc |

  1. armv7-linux-androideabi:

| name | andr:en | andr:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemchr | 1141.800 us | 972.290 us | 1353.900 us | 1022.100 us | | memxmemchr | 1004.700 us | 594.170 us | 981.910 us | 581.470 us | | memxmemchrbasic | 971.860 us | 607.440 us | 943.010 us | 542.700 us | | memxmemchrlibc | 2336.200 us | 1164.400 us | 2031.400 us | 833.020 us | | memchr_memchr | 1538.200 us | 694.770 us | 1476.200 us | 620.350 us |

| name | andro:en | andro:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemcmp | 2888.200 uc | 2469.200 uc | 2108.000 uc | 2083.500 uc | | memxmemcmp | 1148.400 uc | 1439.500 uc | 1376.400 uc | 1521.300 uc | | memxmemcmpbasic | 1146.600 uc | 1429.700 uc | 1381.200 uc | 1519.500 uc | | memxmemcmplibc | 2363.000 uc | 3198.000 uc | 2310.200 uc | 2390.100 uc |

| name | andro:en | andro:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemcpy | 2685.300 uc | 3121.200 uc | 2736.200 uc | 4416.000 uc | | memxmemcpy | 1171.100 uc | 1170.100 uc | 1000.800 uc | 1793.300 uc | | memxmemcpybasic | 1142.800 uc | 1144.200 uc | 1068.000 uc | 1818.200 uc | | memxmemcpylibc | 2198.700 uc | 2197.300 uc | 1856.500 uc | 2985.200 uc |

| name | gnu:en | gnu:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemeq | 2500.500 us | 2590.400 us | 2139.500 us | 2295.200 us | | memxmemeq | 1078.800 us | 1319.800 us | 879.160 us | 1134.000 us | | memxmemeqbasic | 1124.300 us | 1478.200 us | 915.480 us | 1159.900 us | | memxmemeqlibc | 2279.300 us | 3124.900 us | 2264.000 us | 2371.700 us |

| name | andro:en | andro:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemmem | 2781.000 uc | 2119.100 uc | 2717.800 uc | 1984.600 uc | | memxmemmem | 580.130 uc | 582.210 uc | 617.470 uc | 655.810 uc | | memxmemmembasic | 579.280 uc | 582.330 uc | 617.390 uc | 659.470 uc | | memxmemmemlibc | 1982.600 uc | 1997.000 uc | 1454.600 uc | 1488.700 uc | | memchr_memmem | 1934.900 uc | 1960.200 uc | 1844.700 uc | 1954.500 uc |

| name | andro:en | andro:ja | musl:en | musl:ja | |:------------------------|------------:|------------:|------------:|------------:| | stdmemset | 84.693 uc | 153.710 uc | 75.490 uc | 15.630 uc | | memxmemset | 45.985 uc | 82.639 uc | 45.347 uc | 81.686 uc | | memxmemsetbasic | 45.744 uc | 82.058 uc | 45.365 uc | 81.650 uc | | memxmemsetlibc | 60.770 uc | 113.470 uc | 4.496 uc | 8.083 uc |

Changelogs

This crate's changelog here.

References