Allouer de gros blocs avec malloc

Allouer de gros blocs avec malloc - C - Programmation

Marsh Posté le 26-05-2009 à 12:03:05    

Est-ce qu'il existe une méthode quelconque adopté par tout le monde pour allouer un gros bloc de mémoire (ordre du Go par ex) avec malloc.  
 
Concrètement est-ce qu'il est commun de faire simplement ça:

Code :
  1. char* bloc = malloc(1024*1024*1024);


 
J'ai du mal à croire que l'OS puisse allouer un bloc de 1 Go consécutif et pourtant ça marche. A moins que ça ne soit pas vraiment consécutif, c'est peut être juste le gestionnaire de mémoire de l'OS qui facilite les choses et qui gère des blocs dispersés sur la vraie mémoire.
 
Ma question est simple: quelle méthode pour allouer de gros bloc, un simple malloc?
 
Merci pour votre aide.


Message édité par ngkreator le 26-05-2009 à 12:03:55
Reply

Marsh Posté le 26-05-2009 à 12:03:05   

Reply

Marsh Posté le 26-05-2009 à 12:09:07    

ton processus travaille sur de la mémoire virtuelle. Potentiellement (et même probablement), la mémoire que tu as allouée n'est pas contigüe dans ta machine.
Il y a un MMU dans les processeurs pour permettre de gérer ca :)
 
sinon, un bloc que tu considères gros aujourd'hui est aussi un bloc que tu trouveras raisonnable demain et petit après demain.


---------------
last.fm
Reply

Marsh Posté le 26-05-2009 à 12:14:52    

1G d'un coup, tu ne vois pas ça sur ton PC de jeu, maintenant sur une station de travail avec 16G de RAM, en usage scientifique par exemple, c'est très commun.
 
Et la mémoire virtuelle est là pour faire une allocation paresseuse, si bien que tu peux même demander plusieurs To alors que tu n'en utilises qu'une fraction.
 
C'est ce qui passe d'ailleurs quand tu fais une projection de fichier (mmap).

Reply

Marsh Posté le 26-05-2009 à 14:10:26    

Ok donc j'ai pas à me soucier de tout ça alors, Windows le fera pour moi. Quel magnifique OS.


Message édité par ngkreator le 26-05-2009 à 14:10:57
Reply

Marsh Posté le 26-05-2009 à 18:46:30    

c'ets pas l'OS c'ets la MMU du proc ... et linux marche pareil hein :E

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed