Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
(ps: IE loopt hier keihard vast met 30 geneste tabellen
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Waarschijnlijk eerder de browser. Of er in XHTML een limiet is kan je in de standaard nagaanKaastosti: ligt dus aan een limiet in html
edit: traag
[ Voor 6% gewijzigd door mbravenboer op 13-03-2003 15:26 ]
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.
Verwijderd
Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.
Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.
Weet je direct wat voor kunstenaars webdesigners wel niet zijnKaastosti schreef op 13 March 2003 @ 15:50:
lol eigenlijk niet, maar de realiteit is anders... ik zit nou in m'n eerste week stage bij een webdesign-bedrijf en ik sta versteld van de kunsten die hier uit worden gehaald om het allemaal maar mooi en strak te krijgen
Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.
mbravenboer schreef op 13 maart 2003 @ 15:25:
Het lijkt mij eerder dat er een beperking zit op het aantal stack-frames. Je checkt bij zoiets dus niet het aantal geneste tabellen (waarvan PHP helemaal geen kennis heeft), maar de toegestane recursie diepte voor een bepaalde methode. Die is in ieder geval groter dan 28 (hoop ik).
Nou dat ligt eraan
Nu heb ik zo'n beetje de meest minieme functie (foutief) recursief gemaakt
1
2
3
4
5
6
7
8
9
10
11
| <?php function recTest( $n ) { echo( $n . '\n' ); recTest( $n +1 ); } set_time_limit( 0 ); recTest( 1 ); ?> |
En daar kon ik dus met die 8mb 52723 maal van de bovenstaande functie gebruik maken.
Dat betekend dus dat elke call ( ik neem aan gelijk voor elke call, aangezien het niet complexer wordt ) zo'n 8388608 bytes / 52723 keer ~= 160 bytes per call gealloceerd worden. Aangezien een int meestal (aanname!!) 32 bits ( dus 4 bytes ) en een adres van een functie meestal een 32 bits adres is ( ook 4 bytes ) zouden er 40(!) functieadressen en integers geinitialiseerd worden per call
Nu verdonkermaan ik natuurlijk de overheadkosten van het initialiseren van PHP, maar kan dat zoveel schelen?? Maw waar gaat deze berekening op fout
Ik heb overigens die max mem size in de ini al verhoogd met het idee dat het daar aan zou kunnen liggen. Het maakt niet uit wat ik allemaal verhoog, die limiet blijft er. Bij andere recursieve functies zoals die van jou kun je uiteraard nog verder komen (wat ook wel verwacht mocht worden), maar het ging dan ook om het maximaal aantal tabellen wat genest wordt.
Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.
Je moet het zeg maar zo zien:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| class Function { // ... void run () { foreach (statement in statements) statement.run (); } } class Statement { } class FunctionCallStatement extends Statement { void run () { var args[]; foreach (expr as expressions) { args.add (expr.evaluate ()); } function.call (args); // roept Function.run () weer aan } } |
je zit dus midden in de interpreter, en die functies met hun locale parameters komen allemaal op de stack te staan.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Glimi: jouw functie crashed mijn PHP (4.3 onder IIS CGI mode) al na 462 aanroepen.Glimi schreef op 13 March 2003 @ 17:49:
[...]
PHP:
1 2 3 4 5 6 7 8 9 10 11 <?php function recTest( $n ) { echo( $n . '\n' ); recTest( $n +1 ); } set_time_limit( 0 ); recTest( 1 ); ?>
[...]
Functies die van meer variabelen (al dan niet global) gebruik maken crashen bij mij al veel eerder (vaak ook tussen de 25 en 30 calls), en dan zit ik nog lang niet aan mijn memory limit van 32MB.
Lijkt me dus wel degelijk een bug in PHP...
[ Voor 44% gewijzigd door crisp op 13-03-2003 22:52 ]
Intentionally left blank