42 lines
2.4 KiB
Markdown
42 lines
2.4 KiB
Markdown
# Apuntes
|
|
|
|
Ordenados por tema, en el orden en que se ven en el proyecto.
|
|
|
|
1. [Compilación y enlazado](01-compilation-and-linking.md): 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, `nm` y errores del enlazador.
|
|
2. [Punteros y cadenas](02-pointers-and-strings.md): cadenas terminadas en
|
|
`'\0'`, `const char *`, los dos significados de `*`, dónde va el `*`,
|
|
nombres de parámetros, paso por valor frente a puntero, un puntero no sabe
|
|
cuántos elementos hay, `const` en parámetros, arrays y el formato de
|
|
`printf`.
|
|
3. [La memoria de un proceso](03-process-memory.md): 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.
|
|
4. [Go con mentalidad de C](04-go-with-c-mindset.md): benchmark de dos
|
|
estilos, reservas de memoria, padding, slices que comparten memoria,
|
|
dinero en float y el precio de la versión rápida.
|
|
5. [Frameworks y librerías](05-libraries-and-frameworks.md): Qt, por qué en C
|
|
casi no hay frameworks, librerías C relevantes para el proyecto e
|
|
interfaces con punteros a función.
|
|
6. [Make](06-make.md): reglas, grafo de dependencias por fechas, variables
|
|
automáticas, reglas patrón, dependencias de cabeceras con `-MMD -MP` y
|
|
detección de Windows/Linux.
|
|
7. [Memoria dinámica](07-dynamic-memory.md): pila y montón, *escape
|
|
analysis* de Go, `malloc`/`free`/`calloc`, `sizeof *p`, `realloc` y
|
|
estrategia de crecimiento, `memcpy` y desbordamiento al calcular tamaños, fugas, liberar en caminos
|
|
de error sin `defer` (`goto cleanup`), propiedad de
|
|
los punteros y Valgrind.
|
|
8. [Structs](08-structs.md): definir frente a declarar, tipos incompletos y
|
|
tipo opaco, struct público frente a opaco, `typedef`, `uint8_t` y
|
|
`size_t`, qué tipo usar en cada caso, `.` frente a `->` e inicializadores designados.
|
|
9. [Depurar](09-debugging.md): qué es un *segfault*, código de salida 139,
|
|
`NULL` y 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](cheatsheet.md): todos los comandos usados, agrupados por
|
|
tarea.
|