Pour info, Linux en 64 bits est vraiment accomodant avec la mémoire virtuelle.
Sur une machine 8Gio, j'ai lancé le code suivant:
size_t n = get_max_size();
char *p = malloc(n);
printf ("p= %p\n", p);
char *p2 = malloc(1UL<<32);
printf ("p2= %p\n", p2);
char *p3 = malloc(n);
printf ("p3= %p\n", p3);
char *p4 = malloc(n);
printf ("p4= %p\n", p4);
char *p5 = malloc(n);
printf ("p5= %p\n", p5);
char *p6 = malloc(n);
printf ("p6= %p\n", p6);
char *p7 = malloc(n);
printf ("p7= %p\n", p7);
char *p8 = malloc(n);
printf ("p8= %p\n", p8);
char *p9 = malloc(n);
printf ("p9= %p\n", p9);
char *p10 = malloc(n);
printf ("p10= %p\n", p10);
avec la fonction get_max_size définit en
./1.
Les allocations marchent !!!!
p= 0x2b7164044010
p2= 0x2b7524046010
p3= 0x2b7624047010
p4= 0x2b79e4048010
p5= 0x2b7da4049010
p6= 0x2b816404a010
p7= 0x2b852404b010
p8= 0x2b88e404c010
p9= 0x2b8ca404d010
p10= 0x2b906404e010
Et un top donne 139G de mémoire virtuelle alloué (492 octets réel) !
J'ai essayé de voir jusqu'où je peux aller

je peux allouer 4312 fois la taille max calculée avant que malloc me retourne NULL !
Soit
62.7 Tio de mémoire virtuelle ! (top n'arrive même plus à afficher la mémoire virutelle du process !)
Sous Windows, avec une machine 4Gio, j'obtiens : 3.5Gio.
Je serrais curieux de voir le comportement sur les autres OS.