Votre question

Tout est une question de mémoire =)

Tags :
  • Serveur
  • Programmation
Dernière réponse : dans Programmation
13 Août 2007 11:30:25

Bonjour à tous,
Je développe actuellement un client / serveur de supervision réseau en C qui permet de centraliser les informations suivantes:
quelque soit le serveur d'application sur lequel il est installé, le programme retourne:
Le nombre de processeur, avec leur fréquence max et la fréquence d'utilisation (pour faire un graph)
Le nombre de partition, leur espace max et l'espace utilisé, pour une fois de plus avoir une valeur actuelle et un rapport.
La mémoire vive max et la mémoire vive utilisée.
Mon client serveur marche très bien, quoi de plus simple sous linux debian pour retourner ces informations que de les récuperer dans quelques fichiers.
Cependant, et voila le but de ce sujet, je me disais ce matin, vue qu'en C la fonction
  1. malloc()
permet d'allouer dynamiquement de la mémoire, retournant -1 si l'espace voulu dans la mémoire vive n'est pas disponible, est ce qu'il n'existe pas un moyen autre que de consulter des valeurs dans des fichiers (exemple Linux Debian) pour obtenir la mémoire vive max d'un système et la mémoire utilisée? Existe-t-il une fonction?

Bonne journée à tous,

SY57

Autres pages sur : question memoire

13 Août 2007 12:05:14

Pourquoi utilise tu pas le C++ ?

new int :) 
Contenus similaires
13 Août 2007 18:04:07

Bonjour,
Pour répondre à la question de St3fff:
Pourquoi ne pas développer en C++?
Je répondrais par pourquoi ne pas développer en java, C# (avec monodevelopp pour linux), pascal, ou autre?
J'utilise le langage qui répond le mieux à ce que je veux faire. Le C++ offre certe plus de fonctionnalité, mais comme j'en ai pas l'utilité sur ce projet alors j'ai opté pour le C.
Je vais maintenant regarder le lien de Omar_Sharif et si besoin je ferais des remarques.
Cordialement,
SY57
13 Août 2007 18:07:05

Bon je viens de regarder rapidement le lien, c'est plus ou moins ce que je fais actuellement, ce que je voulais savoir c'est est-ce qu'en C, il existe une fonction qui permet d'obtenir la memoire totale du système et la mémoire restante ou utilisée? Le tout sans faire appel ni à des script shell, ni de commande système, ni de fichier à ouvrir.
Tout simplement car c'est ce que fait mon programme actuellement.

Cordialement,

Ps: ma question est juste la pour un but d'optimisation logiciel.
a c 232 L Programmation
13 Août 2007 18:43:02

D'accord, j'avais compris que tu voulais la commande par un shell.
J'ai essayé de chercher, je n'ai rien trouvé là dessus.
13 Août 2007 18:44:34

Ce qui m'etonne c'est que le C est un langage qui est très sensible à la mémoire d'où ma question.
Si je trouve je posterais la réponse.
Merci encore,
Cordialement.
a b L Programmation
15 Août 2007 17:52:27

Je n'ai pas bien compris ce qu'est demandé.

Obtenir la mémoire totale disponible, n'est pas la même chose que connaitre la mémoire maximale allouable par malloc. C'est dû au fait que malloc alloue une mémoire contigüe. Si elle est morcellée (par l'OS évidement), la taille allouable par malloc sera faible (par rapport à la taille totale).

Si c'est pour rechercher du memory leak, tu peux faire une macro qui remplace les malloc et les free (mais il faut modifier le code contrairement au C++).

Si c'est pour voir les infos d'un process, c'est dépendant de l'OS.
15 Août 2007 19:10:21

Bonjour,
Oui c'est pour avoir la mémoire total max d'un systeme, comme je l'ai dit c'est juste une question dans un but d'optimisation.
Cordialement
a b L Programmation
15 Août 2007 20:51:41

Peut-être avec getrlimit() (ce n'est pas C ANSI évidemment).
Mais bon, si tu n'utilises que les malloc et free, ça n'a pas trop d'intérêt. :) 
15 Août 2007 20:57:08

Bonsoir,
non je n'utilise pas que ça, mon client-serveur permet de connaitre la charge en mémoire vive des serveurs sur lequel il est installé.
Actuellement, etant des système Debian Linux, ca le fait en utilisant des acquis système c'est tout.
Je voulais juste savoir si une fonction pouvait donner ces informations, ce qui rendrait mon programme facilement portable.
Cordialement
a b L Programmation
15 Août 2007 22:40:04

En C ANSI, il n'existe pas de telles fonctions, si c'est ce que tu demandes, il faut coder selon le (les) OS. Il n'y a pas d'autre possibilité (ce qui est logique puisque c'est l'OS (via le scheduler) qui décide comment gérer sa mémoire. Donc, pour apporter une flexibilité sur l'OS, ce genre d'information ne fait pas partie de la norme C.
Et je ne crois pas non plus qu'il existe de fonction même dans la norme POSIX (ça restreindrait peut-être trop le dev d'un OS POSIX).
J'ai trouvé une fonction comme mallinfo, mais pas normée du tout :) 
http://www.delorie.com/djgpp/doc/libc/libc_550.html
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS