Se connecter avec
S'enregistrer | Connectez-vous

Tout est une question de mémoire =)

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte

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

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.
Expert Programmation

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.

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
Expert Programmation

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
Lassé par la pub ? Créez un compte
Tom's guide dans le monde