Bibliotecas C y estructuras de datos portátiles e independientes. (C99)
Cada carpeta es independiente y contiene un único par de encabezado/fuente. no hay
compila para bibliotecas, simplemente copia los archivos que quieras.
por ejemplo, si desea el registrador, copie sc_log.h y sc_log.c a su proyecto.
Hay una cobertura de sucursales del 100% en Linux y CI se ejecuta en
SO: Linux, MacOS, FreeBSD y Windows Compiladores: GCC, Clang, MSVC Arco: x64, aarch64, armv6(32 bits), armv7(32 bits), ppc64le, s390x(big endian), riscv64 Desinfectantes: desinfectantes valgrind y clang/gcc (dirección, indefinido, hilo)
Biblioteca | Descripción |
---|---|
formación | Matriz/vector genérico |
buffer | Búfer para codificar/decodificar variables, mejor ajuste para implementaciones de protocolo/serialización |
condición | Envoltorio de condiciones para Posix y Windows |
crc32 | Crc32c, utiliza la instrucción de CPU crc32c si está disponible |
montón | Montón mínimo que también se puede utilizar como montón máximo/cola de prioridad |
ini | analizador inicial |
lista enlazada | Lista enlazada intrusiva |
registrador | registrador |
mapa | Un hashmap de direccionamiento abierto de alto rendimiento |
mapa de memoria | Envoltorio mmap para Posix y Windows |
exclusión mutua | Envoltorio Mutex para Posix y Windows |
opción | Analizador de argumentos de cmdline. uno muy basico |
rendimiento | Utilidad de referencia para obtener información de contadores de rendimiento a través de perf_event_open() |
cola | Cola genérica que también se puede utilizar como retirada de cola/pila/lista |
Carolina del Sur | Funciones de utilidad |
señal | Snprintf seguro de señales y controlador de señales (manejo de CTRL+C, impresión de seguimiento en caso de accidente, etc.) |
enchufe | Conectores Pipe/tcp (también sockets de dominio Unix) /Epoll/Kqueue/WSAPoll para Posix y Windows |
cadena | Cadenas C terminadas en nulo y con prefijo de longitud. |
hilo | Envoltorio de subprocesos para Posix y Windows. |
tiempo | Funciones de hora y sueño para Posix y Windows |
minutero | Implementación de rueda de sincronización con hash con operaciones rápidas de sondeo/cancelación |
uri | Un analizador de uri básico |
¿Es mejor que la biblioteca X?
A menudo uso estas bibliotecas para aplicaciones del lado del servidor de alto rendimiento. También,
Me importa el código legible y fácil de depurar. En resumen, estas bibliotecas muestran
mi gusto (compensaciones) sobre rendimiento/diseño de API/legibilidad. usted puede o puede
No me gusta.
¿Por qué no cambia la API aquí en X, para que sea más fácil de usar?
Envíe una solicitud de extracción, pero asegúrese de no introducir un elemento indefinido.
comportamiento. Es posible proporcionar mejores API, especialmente para bibliotecas genéricas.
si no te importan los comportamientos indefinidos. Intento evitarlo.
¿Cuál es la forma más eficiente de utilizar estas bibliotecas?
Como cualquier otro código. Agregue a su proyecto como archivos fuente e idealmente use
-O3 -flto + PGO. Sin embargo, es posible que no haga ninguna diferencia para su caso de uso.
¿Se utiliza la biblioteca X en algún producto?
Algunas bibliotecas se utilizan en la producción, pero siempre pruébelas usted mismo.
¿Hay alguna liberación?
Utilice la rama maestra. Se considera estable.
¿Mantendrás la API estable?
No espere una API estable. Estas bibliotecas son bastante
pequeños (la mayoría de ellos tienen menos de unos pocos cientos de líneas de código) e idealmente
Se supone que deben leer el código, comprender lo que hace y adaptarlo a sus necesidades.
necesidades. Por lo tanto, no debes actualizar las bibliotecas a ciegas. Espero que lo manejes
cualquier posible diferencia de API fácilmente. Dicho esto, haré todo lo posible para mantener
API estable.