/* bench_extra.c — lo que las dos sorpresas piden aislar: * a) coste de fork EN FUNCION del espacio de direcciones del padre * b) contabilidad por cgroup v2 vs sumar /proc * c) tasa del enlazado dinamico en el exec * d) cierre de descriptores en el spawn */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include #include extern char **environ; static volatile long sink; static inline double now_ns(void){ struct timespec t; clock_gettime(CLOCK_MONOTONIC,&t); return t.tv_sec*1e9+t.tv_nsec; } static int cmpd(const void*a,const void*b){ double x=*(const double*)a,y=*(const double*)b; return (x>y)-(x1?argv[1]:"/bin/true"; const char *dyn = argc>2?argv[2]:"/bin/true"; printf("%-44s %10s %10s\n","BENCH (us/op)","min","mediana"); printf("--- a) fork segun el espacio de direcciones del padre ---\n"); long mbs[]={0,16,64,256}; for(unsigned k=0;k