Bonjour,
Je dois maintenir des librairies écrites une en C et les autres en C++ sous un environnement solaris 7 (j'utilise WorkShop Compilers 5.0 98/12/15 C 5.0).
Les librairies en C++ sont des CFX (custom tag de Coldfusion) qui appellent des fonctions de la librairie C. Cette dernière est un interface (un peu de code métier) à une base de données Oracle.
Voici mon problème, on a découvert que la pluparts des appels des CFX se font dans des threads dont la taille de la pile est limitée (je ne connais pas la taille exacte de la pile). Ces CFX et la librairie C allouent des structures de données (d'une taille de quelques octes à plus de 50Koctets) dans la mémoire automatique, des tableaux de char (string de 64 à 4001 caractères).
Cette allocation génère une instabilité dans notre application (l'application crashe) car une grande partie de la mémoire automatique est consommée par ces structures. Ma tâche est donc de corriger ce comportement en allouant les structures non pas dans la mémoire automatique mais dans la mémoire allouée.
Voici mes questions concernant la bonne pratique en C.
1) Quels sont les critères pour décident si l'allocation a lieu dans la mémoire automatique ou dans la mémoire allouée?
2) J'ai pris la décision que toutes les structures indépendamment de leur tailles seront en mémoire allouée. Est-ce une bonne pratique?
3) Mais j'ai un doute concernant les tableaux de caractères de petite taille (<= à 256octets), dois-je réserver leurs places en mémoire alouée?
4) L'allocation de la mémoire (fonction malloc) a-t-elle une impacte négative sur la performance d'un programme écrit en C?
5) Est-il envisageable si l'allocation a une grande influence (temps) de gérer la mémoire à l'aide d'un pool?
Mon idée serait que les structures ne seraient pas libérées mais elles seraient placées dans ce pool en attendant que le programme réclame une structure du même type (donc de même taille).
Merci d'avance pour vos réponses, remarques ou conseils
Partager