License: BSD 3-Clause Usage Single Header
The qqsort macro is a reimplementation of qsort function from glibc with more ability to inline comparison function.
#include <stdio.h> #include "qqsort.h" int main(void) { int array[] = {4, 3, 2, 1, 0, 5, 6, 7, 8, 9}; int size = sizeof(array) / sizeof(array[0]); qqsort(array, size, sizeof(int), qqsortcmp(int *a, int *b) { qqsortret(*a - *b); }); for (int idx = 0; idx < size; idx++) { printf("%d ", array[idx]); } return 0; }
❗This project is just an experiment to study the influence of inlining on code performance.
Machine used for benchmark:
- AMD Ryzen 7 5800x
- 16GB RAM
- Linux 6.2.0
For the benchmark, a simple C++ program was implemented to sort an array of structures in three ways:
- Sorting using
stl - Sorting using the
qsortfunction of the library - Sorting with the
qqsortmacro
Three compilers were used to build the benchmark:
g++ 11.4.0clang++ 14.0.0msvc 19.37
The following compilation flags were used:
COMPILE_ARGS = [ "-flto", "-O2", ... ]
The qqsort macro showed positive results in performance only when using the g++ and msvc compilers. When using clang++, the qqsort macro performs worse than the qsort function.