Уптимизирвал тут уптимизации, подумалось локальность данных улокалить, а чёб нет.
Пример, скорости мытья 400000000 тарелок
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc, char *argv[])
{
    uint32_t   len = 20000;
    
#ifdef Villabajo
    uint32_t ** mem_a = malloc(sizeof(uint32_t *) * len);
    for (int i = 0; i < len; ++i)
    {
        mem_a[i] = malloc(sizeof(uint32_t) * len);
        for (int j = 0; j < len; j++)
        {
            mem_a[i][j]=j;
        }
    }
#endif
#ifdef Villaribo
    uint32_t  * mem_b = malloc(sizeof(uint32_t)*(len*len));
    uint32_t ** mem_c = malloc(sizeof(uint32_t*)*len);
    for (int i = 0; i < len; ++i)
    {
        mem_c[i] = mem_b+len*i;
        for (int j = 0; j < len; j++)
        {
            mem_c[i][j]=j;
        }
    }
#endif
    return 0;
}
dron@gnu:~$ gcc gg.c -O0 -DVillabajo -o Villabajo && time ./Villabajo
real	0m3,499s
user	0m2,602s
sys	0m0,876s
dron@gnu:~$ gcc gg.c -O0 -DVillaribo -o Villaribo && time ./Villaribo
real	0m2,737s
user	0m2,160s
sys	0m0,561s
dron@gnu:~$ 
Странно что раньше как то в голову не приходило мне. Есть конечно минус в том что память не разделена как бы и всё от этого вытекающее, но в остальном только вроде плюсы.





