Quand tu alloue de mémoire sous windows il y a deux cas :
1er : Il y a de la place, donc ca fonctionne
Dans ca cas, ca va prendre un seul et même bloc phisiquement dans la ram, ca va occupée un espace unique non séparé, il n'y aura pas de fragmentation (comme sur le disque dur)
2eme cas: Il n'y a pas de place dans la ram
Alors là on va cherche dans le swap, c'est la ram de secour... qui est en faire le disque dur, mais evidemment, ca fait que 100mb/sec contre du 10gb/s en moyenne pour la ram.
S'il n'y a pas de SWAP de dispo, là c'est la merde, car normalement dans ton programme, quand tu le fais, et que tu alloue de la mémoire, la fonction qui aloue de la mémoire te retourne (en gros) l'adresse physique où est stockée la donnée sur ta ram. Si ca fail, ca retourne une valeur null (A la place de 0xA4BC57FB (ou un truc dans le genre), on aura 0x00000000, et si tu verifie pas que la valeur est égale a une valeur fausse (0x00000000, ton programme va crash )
Pour en revenir à ta question : Oui, si d'autres programmes prennent de la ram, et s'il n'y a pas de bloc libre assez gros, ca va poser problème.
Tu peux degager les autres progs pour liberer de l'espace, oui.
Un programme ne peut pas se planter en croyant qu'il n'y pas assez de ram, y'a pas de "je check avant de sauvegarder la mémoire", c'est :
Je sauvegarde ma mémoire et je regarde si ca casse, si ca casse, je balance un message d'erreure et je choisis de fermer mon programme ou pas (car de toute facon, si t'as pu' de ram tu peux plus faire grand chose)
Après y'a des alternatives à ca, les listes chainés, pour illustrer ca :
Le malloc traditionnel revient à mettre toute une rangée de maisons dans une rue.
Disons que une rue peut avoir 20 maisons.
Si tu veux allouer 21 maisons, ca passe pas, ca va vers le swap (disque dur)
Si tu veux en allouer 10, ca passe, SAUF s'il y a une seule maison case 7 et une autre case 15, là tu ne pourra pas loger ton bloc de 10 maisons, la solution est de sauvegarder une maison par une maison, et coller sur la maison l'adresse de la maison suivante, donc c'est juste histoire de place libre et pas de "taille du plus gros bloc libre" dans la ram.
Après cette technique est plus lente coté CPU, pour attendre la toute dernière maison, tu vas pas au bout de la rue (car tu sais pas ou est la dernière maison etant donné que tu remplis des casses de 1, 1 par 1, donc tu remplis les trous libres et pas les grosses plages libres)) tu dois donc parcourir maison par maison, regarder sur le mur de chaque maison, où est la maison suivante que tu cherche, jusqu'a arriver a la maison qui n'a pas "d'adresse de maison suivante dessus".
Déso pour les fautes (et surtout accents) je suis sur un QWERTY, c'est pas EZ