complexité d'une application

a marqué ce sujet comme résolu.

Bonsoir,

je veux savoir comment dégager la complexité des applications crée , c’est à dire combien mon application vas prendre de ram et du proc au pire des cas.

est ce qu’il y’a des programmes ou utilitaires ou une méthode normalisée pour tirer ce type d’information ??

merci

TL;DR: c’est compliqué à faire et ça va prendre vachement de temps. Faut voir le logiciel.

combien mon application vas prendre de ram et du proc au pire des cas

C’est compliqué à déterminer, surtout si ton programme tourne sur un PC avec un OS type Linux/Windows/Mac. Ces OS ont tous leurs façons d’allouer la mémoire. Sous Linux tu as l’outil ps (aussi l’outil top/htop) pour afficher les informations sur les processus en cours de fonctionnement, mais les informations qu’il va te donner ne représentent pas exactement la mémoire allouée (généralement plus que nécessaire).

Pour la RAM

Le plus simple, c’est d’utiliser l’outil Valgrind avec son extension massif pour analyser l’utilisation du tas (ce sur quoi tu alloues quand tu fais un new ou malloc).

1
valgrind --tool=massif ./ton-exécutable <arguments de ton exécutable>

Celà te donnera un fichier massif.out.qqch qui te donnera les informations importantes de la mémoire utilisée.

L’autre moyen, c’est d’effectuer une analyse statique du programme :

  1. tu notes chaque endroit où tu fais une allocation mémoire, avec la taille des blocs alloués à chaque fois
  2. tu détermines quelles allocations sont statiques (càd celles dont on connaît le nombre à la compilation)
  3. pour toutes les autres allocations, tu essaies de déterminer un nombre selon le service fournit (exemple : pour un serveur web, les allocations dynamiques sont dépendantes du nombre d’utilisateurs connectés; tu peux donc déduire la mémoire par utilisateurs).

Pour le proc

Là c’est la colle. Ca dépend du nombre de processus lancés, du modèle de CPU, de la fréquence, de la mémoire allouée, etc. Et si ton programme utilise plusieurs coeurs (via les threads ou les processus), tu ne pourras rien faire (vu que tout se fait en parallèle).

Il faudrait plus d’informations sur ton programme et son architecture pour identifier une tendance sur l’utilisation du processeur. Pareil que pour la RAM, l’outil ps ou top te donnent une indication de l’utilisation du processeurs (mais là aussi c’est pas exactement les chiffres exacts).

En résumé

est ce qu’il y’a des programmes ou utilitaires ou une méthode normalisée pour tirer ce type d’information

Si ton programme est mono-processeur et qu’il est seul (le noyau est considéré comme un processus), alors oui il est possible de déterminer la mémoire utilisée (l’utilisation du proc aussi, mais ça dépend du CPU).

Si tu veux plus d’aide, il faudrait nous présenter le logiciel visé par ta question.

+0 -0

Salut ntimeu , Merci pour la clarté de ta réponse , donc ce que je vise pour le moment c’est de suivre le cout des applications en design pattern mvc qui sont dans un serveur quelconque , pour programmer certain réaction en cas d’exploitation maximale des ressources ou une forte probabilité que le serveur tombe en panne.

Alors s’il s’agit d’un site web codé en PHP/Ruby/autre (si tu fait du MVC web, peut-être pas), ça va être très compliqué étant donné que les allocations te sont cachées.

Le plus simple peut être d’utiliser les cgroups sous Linux pour autoriser l’interpréteur à n’utiliser qu’une certaine quantité de RAM au maximum (pareil pour le cpu). Il suffit d’identifier une limite "haute" pour empêcher ton programme de consommer plus.

Par contre quand les allocations ne se font plus (limites mémoires) tu auras probablement un crash ou une erreur de la part de l’interpréteur. Et là il faut que tu redémarres ton appli.

je présume que le langage doit être la version orientée objet du langage c ’Objective C’

Oulah o_O Objective-C est un langage complètement différent du C (et ce n’est même pas un pendant Objet du C). La version objet du C est le C++. Lien vers la référence officielle du langage. Ici pour t’aider à démarrer.

pour une question d’organisation et en respectant une modélisation

Heu … j’ai un peu de mal à comprendre pourquoi tu parles d’organisation et de modélisation. Si tu dois respecter une modélisation UML pour faire ton programme alors oui tu utilises les classes en C++. Par contre cette approche a tendance à ajouter beaucoup de temps CPU inutile et d’allocations mémoire (création des classes, destruction, imbrication des classes, etc). Donc il faut savoir ce que tu veux. Sans compter les exceptions qui ajoutent de l’incertitude dans l’exécution de ton programme.

Sache qu’utiliser un langage objet n’est pas nécessaire, même si ça rend le programme plus lisible et maintenable (et moins buggué).

+1 -0

Plus subjectif comme point de vue, c’est difficile. :euh:

Je te l’accorde. Mais entre développer un programme en C et en C++, il y a souvent des simplifications qui peuvent être effectuées, surtout au niveau des structures.

Un autre exemple, c’est la gestion intelligente de la mémoire en C++ (pareil pour la notion d’ownership), chose qui nécessite une rigueur assez impressionnante. Et puis les containeurs standards génériques, ça te sauve la vie.

Je travaille sur une grosse base de code en C++, et crois-le ou non écrire un tel programme en C serait un cauchemard. Le C++ moderne ajoute une réelle plus-value au langage (et je crois que je me répète).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte