À ce stade, l'architecture comme l'O.S. que tu utilises sont significatifs. Donc :
— Il se peut effectivement que ton système mette en place des quotas. Mais si c'est sur ta machine personnelle, c'est peu probable ;
— Quand tu alloues un bloc de mémoire, tu alloues également de la place pour un bloc descripteur qui contient les infos nécessaire pour libérer ce bloc avec
free(). Cela augmente d'autant la quantité de mémoire que tu consommes ;
— Lorsque tu flirtes avec les 2 Go, tu commences à atteindre les limites du format «
signed int » sur 32 bits ;
— Tous tes blocs, même s'ils ne sont pas forcément mappés simultanément, doivent avoir une position propre dans le plan mémoire pour pouvoir être exploités par le processus, celle-là même qui t'est renvoyé par
malloc(). Et un segment de 2 Go octets de mémoire, ça commence à être dur à caser sur une machine 32 bits. Plus précisément, 32 bits te permettent de représenter exactement 4 Gio de mémoire. Là-dessus, il y en a un bon quart qui est occupé par le PCI. Le reste l'est par le BIOS, les vecteurs d'interruptions et autres, mais surtout par le
kernel de ton système d'exploitation, le code de ton processus, toute sa pile (qui peut être conséquente), et par les bibliothèques partagées.
Donc, remplir le plan mémoire aux alentours de l'endroit où tu plantes est cohérent.
Partager