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
qsort
function of the library - Sorting with the
qqsort
macro
Three compilers were used to build the benchmark:
g++ 11.4.0
clang++ 14.0.0
msvc 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.