Apuntes
Ordenados por tema, en el orden en que se ven en el proyecto.
- Compilación y enlazado: etapas de gcc,
cómo compila Go, empezar por cualquier etapa (
.i,-save-temps), qué hay dentro de un.i, unidades de traducción, por qué basta la declaración para compilar, cabeceras e#include, encapsulación y tipos opacos, include guards, flags, qué ve quien recibe los binarios,nmy errores del enlazador. - Punteros y cadenas: cadenas terminadas en
'\0',const char *, los dos significados de*, dónde va el*, nombres de parámetros, paso por valor frente a puntero, aritmética de punteros (p + i,p[i]) y qué viaja al llamar a una función, un puntero no sabe cuántos elementos hay,consten parámetros, arrays y el formato deprintf. Versión interactiva con dibujos: 02-pointers-visual.html (ábrela en el navegador). - La memoria de un proceso: memoria virtual, fallos de página, modo usuario y modo núcleo, llamadas al sistema, cómo se lee la memoria de otro proceso, y por qué el peligro real está en la tuya.
- Go con mentalidad de C: benchmark de dos estilos, reservas de memoria, padding, slices que comparten memoria, dinero en float y el precio de la versión rápida.
- Frameworks y librerías: Qt, por qué en C casi no hay frameworks, librerías C relevantes para el proyecto e interfaces con punteros a función.
- Make: reglas, grafo de dependencias por fechas, variables
automáticas, reglas patrón, dependencias de cabeceras con
-MMD -MPy detección de Windows/Linux. - Memoria dinámica: pila y montón, escape
analysis de Go,
malloc/free/calloc,sizeof *p,reallocy estrategia de crecimiento,memcpyyrestrict, desbordamiento al calcular tamaños, fugas, liberar en caminos de error sindefer(goto cleanup), propiedad de los punteros y Valgrind. - Structs: definir frente a declarar, tipos incompletos y
tipo opaco, struct público frente a opaco,
typedef,uint8_tysize_t, qué tipo usar en cada caso,.frente a->e inicializadores designados. - Depurar: qué es un segfault, código de salida 139,
NULLy la página 0,free(): invalid pointer(código 134), método para depurar con Valgrind, los comandos mínimos de gdb y la depuración visual en VS Code.
Chuleta de comandos: todos los comandos usados, agrupados por tarea.