J'ai besoin d'idées sur la façon d'écrire un programme C qui réserve une quantité spécifiée de MB RAM jusqu'à une clé [ex. La touche TOUT] est enfoncée sur un système Linux 2.6 32 32 32 32 32 32.
* /.eat_ram.out 200 # If free -m is execute at this time, it should report 200 MB more in the used section, than before running the program. [Any key is pressed] # Now all the reserved RAM should be released and the program exits. *
5 Réponses :
Vous ne pouvez pas simplement utiliser Voici un exemple pour vous: p> si vous voulez plus d'informations , Jetez un coup d'œil à la page de l'homme ( masloc () code> pour allouer cette RAM à votre processus? Cela réservera cette RAM pour vous, puis vous êtes libre de faire ce que vous souhaitez avec elle.
homme masloc code> dans une coque Linux). Si vous n'êtes pas sur Linux, consultez La page Man . < / p> p>
Il se peut que cette allocation dynamique soit nouvelle pour ce type ... Vous devriez vraiment l'expliquer, ou du moins fournir un lien vers un didacticiel décent.
Cela semble être un excellent cadre pour la demande finale.
De plus, comme le souligne Tim Post, Malloc n'est pas toujours suffisant. La mémoire peut ne pas être réellement réservée avant de l'écrire, par exemple.
@ Steve314 - Apparemment, MALLOC n'alloudra pas la mémoire physique, mais cela garantira suffisamment de mémoire virtuelle allouée. Cela devrait toujours apparaître dans une ressource gérer, Afaik.
Vous voulez utiliser MALLOC () pour le faire. Selon votre besoin, vous voudrez également: P>
Dans la plupart des réalités, MALLOC () et MEMSET () (ou, CalloC () qui fait efficacement les mêmes) conviendra à vos besoins. P>
Enfin, bien sûr, vous voulez libérer () la mémoire quand elle n'est plus nécessaire. p>
J'ai trouvé le manuel du programmeur POSIX lors de la recherche sur les fonctions que vous mentionez, je pense que cela me sera utile également.
Pour ceux qui se demandent; À moins que vous n'utilisiez la mémoire que vous avez demandée, le noyau peut tuer votre processus et donner la mémoire à un autre processus qui a demandé la mémoire. Ceci s'appelle Overgommit i>.
DreamLax - Merci pour l'information, je viens d'apprendre le pourcentage surmonter sur mon système et j'ai trouvé des informations sur vm.overcommit_memory, je ne le sais pas avant
Vous pouvez désactiver le surcommande en tapant (en tant que root) dans une coquille: ECHO 2> / PROC / SYS / VM / OverCommit_Memory code>
+1 pour Mlock () / Mockall (). Assurez-vous d'écrire en mémoire afin que la mémoire soit réellement revendiquée.
@Jack - Beaucoup de gens négligent POSIX_MADVISE () CODE> (surtout avec des segments partagés) car ils craignent le noyau, ce qui en fait l'une des interfaces les moins testées que Linux a. Je suppose que c'est ce qui se passe lorsque le noyau que vous utilisez a une réputation d'être un tueur en série :)
Vous aurez besoin de: p>
Il est en fait de vérifier le gestionnaire de ressources dans un cluster afin qu'un travail soit exécuté lorsque X MB de RAM est gratuit sur un nœud. Mais j'essaie d'apprendre C quand je ne travaille pas avec des clusters, donc j'ai posté la question ici afin que je puisse essayer les différentes idées et solutions et apprendre de nouvelles parties de C en même temps.
Si vous voulez savoir combien de mémoire est gratuite, vous devez absolument utiliser / proc / vmstat et non seulement tester pour l'échec MALLOC.
@ petersmith221: rock on, bonne philosophie. @Matt j: excuses de détournement d'un commentaire juste pour cette adresse au commentaire de l'affiche original. :-)
calloc () code> est ce que vous voulez. Il réservera la mémoire pour votre processus et écrira de zéro. Cela garantit que la mémoire est réellement allouée à votre processus. Si vous
MALLOC () CODE> Une grande partie de la mémoire, le système d'exploitation peut être paresseux d'allouer la mémoire pour vous, ce qui ne l'attribue réellement que lorsqu'il est écrit (qui n'arrivera jamais dans ce cas). < / p>
Est-ce que cela devrait fonctionner. Bien que j'ai pu réserver plus de RAM que je n'ai installé, cela devrait fonctionner pour des valeurs valides, tho.
"Toute clé"? Cette blague n'a pas encore été morte? Vous sont i> plaisanter, n'est-ce pas?
J'ai récemment vu l'épisode Simpsons no. 135 [Homère King-Taille]: Pour commencer, appuyez sur n'importe quelle touche ". Où est la clé de n'importe quelle clé? Je vois esk [" ESC "], catarl [" Ctrl "] et porc-up [" PGUP "]. Il n'y a pas semblent être n'importe quelle clé. Woo! Tout ce ordinateur piratage me rend assoiffé. Je pense que je vais commander un onglet. [appuie sur la touche TAB] AWP ... Pas de temps pour cela maintenant, l'ordinateur commence que la blague ne mourra jamais =)
Ce n'est pas des devoirs, il est de vérifier un gestionnaire de ressources dans un cluster, mais également apprendre en même temps