[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [HS] mauvaise gestion mémoire sous Linux



Le programme C++ suivant :

#include <iostream>

int main ()
{
	long taille;
	int * pint;
	int nbloc;
	cout<<"Taille de bloc : ";
	cin>>taille;
	for (nbloc = 1; ; nbloc++) {
		pint = new int[taille];
		if (pint)
			cout<<"Alloc bloc n°"<<nbloc<<endl;
		else {
			cout<<"Alloc impossible";
			break;
		}
	}
}

...engendre invariablement le message "Alloc impossible" sous AIX, qqsoit la taille de bloc, lorsque le système a épuisé les ressources mémoire.
Sous Linux, en fonction de la taille de bloc demandée, on a un message
"Abort"
ou bien
"Segmentation fault"
mais JAMAIS "Alloc impossible"...

Ca m'a vraiment surpris quand je l'ai découvert...
De loin, ça ressemble à une faiblesse, parceque ça va être dur d'implémenter une gestion d'exception sur les capacités mémoire.
Haureusement que ça ne concerne que peu d'applis...
C'est peu-être AUSSI un pb. dans la façon dont le compilateur C++ (xlC dans le cas d'AIX, g++ pour Linux) implémente la fonction "new".
Ce genre de choses ne devrait pas se produire.

Georges Mariano wrote:
[...]

c) ensuite, lors de l'acquisition des données, il se produit un
"segmentation
fault" (à cause d'une saturation mémoire ??)...

d) développant en ADA (gnat), la personne se plaint que si un contrôle fin
été fait lors de/juste après  la _déclaration_, une exception ADA serait
levée, capturée et traitée
par l'utilisateur qui pourrait donc ainsi déterminer la suite de
l'exécution.
Le contrôle n'étant pas fait, l'utilisateur n'a pas les moyens de
reprendre le contrôle et boum plantage...

Cette vision de la gestion mémoire Linux n'est qu'une intuition de la
chose, on n'a pas
d'expert sur ce sujet ici... Personnellement, je trouve ça "gros".
Est-ce un "problème" (un choix techno) de compilo, de linux, de ... ???

Si quelqu'un pouvait nous en dire plus, ce serait sympa...
En privé, si vraiment c'est trop hors-sujet.

A+






Reply to: