The qqsort macro is a reimplementation of qsort function from glibc with more ability to inline comparison function.
#include<stdio.h>#include"qqsort.h"intmain(void) {
intarray[] = {4, 3, 2, 1, 0, 5, 6, 7, 8, 9};
intsize=sizeof(array) / sizeof(array[0]);
qqsort(array,
size,
sizeof(int),
qqsortcmp(int*a, int*b) {
qqsortret(*a-*b);
});
for (intidx=0; idx<size; idx++) {
printf("%d ", array[idx]);
}
return0;
}❗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.
