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.
