Bonjour à tous,
N'étant pas expert en C, ma question va peut être sembler stupide, mais j'aimerais bien trouvé un expert(ou n'importe qui ayant la réponse

) pour y répondre

Alors voilà, je développe présentement un patch pour protéger la pile d'appel du moteur PHP. Étant administrateur de plusieurs serveurs FreeBSD/Linux utilisant le php, un appel récursif sans fin provoque rapidement une faute de segmentation ce qui pourrait facilement mettre hors service un serveur (attaque DoS).
Enfin bref, après plusieurs expérimentations afin de voir la taille de la pile dépendait de quoi, j'en suis venu aux résultats suivants:
Linux: Un programme un C cause une faute de segmentation après 392 952 récursion
PHP plante après 39 354 récursions.
FreeBSD: C plante après 8 388 133 récursions
PHP après plus de 390 000 récursions
Windows 2003: Un programme C compilé avec gcc(mingsw) plante après 130 000 récursions
Un programme C compilé avec VS6
ne plante jamais, en redirigeant la sortie vers un fichier le fichier grossis sans arrêt, j'ai stoppé ça à 8Go.
Php plante après environ 50 000 récursions.
Windows Vista: Un programme compilé avec VS 2008
ne plante jamais. Tout avais été compilé en mode release.
Les codes utilisés:
Code C:
http://pastebin.com/m6ac4c8c9
Code C (VS2008):
[ Lien ] Script PHP:
http://pastebin.com/m491281a0
Bref ma question est:
La pile d'appels (stack call) dépend de quoi ? J'ai toujours cru que c'était dépendant du système d'exploitation, mais visiblement ce n'est pas le cas. Pourquoi sous windows avec un compilateur de chez microsoft ça ne s'arrête jamais ? Passé 10 milliards ça continue...
J'espère voir un expert (brunews ?) passer par là avec des explications concrètes

Merci de votre aide.
-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la :
www.e3b.org 