30

Oui ça j'avais compris c'est pour cela que là ou je dois écraser par la suite je met des TAG_unitile en nombre suffisant pour écrire dessus par la suite.
Mais si je veux faire un memcopy de l'estack entre 2 pointeurs je fait comment ?
parce que si on peut convertir les ESI en pointeur sur void * je supose alor je pourrait implémenter l'insertion ?
existe t-il une fonction pour transformer les ESI en pointeur ?

31

andoh_wilfried
: Oui ça j'avais compris c'est pour cela que là ou je dois écraser par la suite je met des TAG_unitile en nombre suffisant pour écrire dessus par la suite.

Beurk! Beurk! Beurk! sick
Tu ne peux pas utiliser la pile d'expression de la manière prévue???
Mais si je veux faire un memcopy de l'estack entre 2 pointeurs je fait comment ?

Ben, tu fais un memmove (pas un memcpy! memcpy, c'est pour le cas non-overlapping seulement!). smile Mais c'est vraiment gore!
parce que si on peut convertir les ESI en pointeur sur void * je supose alor je pourrait implémenter l'insertion ?

Les ESI sont déjà des pointeurs, tu peux les utiliser comme des void * sans autre forme de procès. (Mais ça ne veut pas dire que c'est propre. roll)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

32

En français s'il te plait K.K. ! en Français !
Déjà qu'il faut se taper le Manuel en anglais de TIGCC, va pas mettre de l'anglais dans tes phrases.
C'est déjà assez compliqué comme ça !

33

non-overlapping == qui ne se recouvre(nt) pas
Le cas "non-overlapping", c'est le cas dans lequel la zone source et la zone destination sont des ensembles distincts.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

34

je te signale que je débute en C, alors du calme. je fait ce que je peux et s'il m'arrive de me tromper en utilisant des terme c'est juste parceque je ne peux pas lire toute la documentation en même tant. là je travail sur la pile pas sur la mémoire.

Tu vas finir par empêcher quelqu'un d'emettre des idées à la fin !
c'était une suggestion de débutant en C et crois moi ça va pas durer bien longtemps !

35

Donc si je comprend bien , je peux redimensionner la pile avec realloc et ensuite un petit coup de memmove pour faire de la place à l'endroit voulu , et voici l'insertion dans le ESTACK.

36

andoh_wilfried
: Donc si je comprend bien , je peux redimensionner la pile avec realloc

Non.
Déjà s'il y a un truc à utiliser pour redimensionner, c'est HeapRealloc, pas realloc, et ensuite la pile d'expressions a déjà assez de place normalement, il ne faut pas la redimensionner.
et ensuite un petit coup de memmove pour faire de la place à l'endroit voulu , et voici l'insertion dans le ESTACK.

Bonne chance. Je reste de l'avis que c'est un hack de la pire sorte et que tu devrais utiliser la pile d'expressions correctement.

As-tu regardé les sources de Gosper89? Ça montre comment on utilise la pile d'expressions correctement.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

37

Bon je ne vais pas redimensionner l'estack si ien sur tu peux me dire :
- Si elle a occupe en mémoire une place fixe dont on connait les adresse des pointeurs debut fin pour au moins augmenter la pile sans écraser un autre espace reservé. Mais je doute que ce soit ainsi. La pile se crée et se détruit par appel de chaque prog je pense.

Je vais voir le source dont tu parle en cerchant dans google.

38

La pile d'expressions est un handle locké toujours alloué, elle n'est pratiquement jamais redimensionnée. C'est elle qui prend une grande partie de la mémoire "System".
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

39

ok donc comment je fait pour connaître le maxî de pile j'ajoute sa taille au pointeur pour le dire grossièrement. comme ça je ne pourrait pas écrire en dehors.
Mais à t'on avis est-ce plus rapide de manipuler et déplacer des arguments directement sur la pile que de les sauvegarder dans des tableau pour ensuite les recopier ? car après tout cela revient à des copies de données entre de pointeurs. Et si cela se trouve je vais peut-être perdre du temps à manipuler la pile en créant l'insertion qui à chaque fois devra deplacer des blocs de mémoire.
C'est quoi ton avis K.K.?

40

La taille maximum, c'est 65520 octets normalement.
Et je ne sais pas ce qui est plus rapide.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

41

Ok ! une autre question.
Vu la méthode proposée pour efface l'estack dans l'exemple 'ADD 2 number' de TIGCC, je me pose des questions :

-tu déplace le top_estack après les arguments de la fonction appellante et on s'arrête au premier END_TAG , ( c'et une méthode pour des argument simple.
je suppose que dans l'absolu, on doive deplacer le top_estack au bottom_estack.)

- ça efface pas vraiement : donc en déplaçat ainsi le top_estack on arrivera à la fin de la zone mémoire allouée à l'estack forcément.

Que se passera t'il alors : je suppose un Garbage Memory non !

42

Non, en déplaçant top_estack de cette manière, les arguments se trouvent pour AMS "en dehors" de la pile d'expressions (plus précisément: en dehors de la partie utilisée de la pile d'expressions; le handle, lui, ne bouge pas) et la prochaine écriture les écrasera.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

43

K.K.> oui mais j'ai pas de reponse pur la meilleur façon d'effacer le top estack , surtout lorsqu'on utilse des arguments complexes qui comporte eux même des END_TAG. du coup l'effacement va s'arrêter uau 1er END_TAG trouvé.

C'est plus sur d'aller jusqu'à botom_estack qui je suppose pointe sur le END_TAG de la fonction qui à passée des arguments sur la pile non !
comme ça on est toujours sur de ne rien laisser trainer

44

Non, tu ne peux pas effacer jusqu'à bottom_estack. Il peut y avoir aussi d'autres trucs sur la pile d'expressions:
* historiques
* autres appels dans la même ligne
...
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

45

Ah pardon , autant pour moi je me suis laissé allez à délirer alor que j'utilise cette astuce pour passer les arguments de mon prog 'mkarg' à une fonction/programme en les laissant trainer sur la pile.

En claire y a-t-il un moyen de savoir où fini l'appel d'une fonction ? (un TAG par exemple)
Ou mieux encore combien d'arguments sont passées à une fonction ; en supposant bien sur que la fonction appelée est imbriquée dans plusieurs appels.
Il ne me reste alors que la solution de passer un Caractère pour indique la fin de ma fonction (genre un TAG)

46

>En claire y a-t-il un moyen de savoir où fini l'appel d'une fonction ? (un TAG par exemple)
ESI *p;
while (*p != END_TAG)
p = next_expression_index (p);

>Ou mieux encore combien d'arguments sont passées à une fonction ; en supposant bien sur que la fonction appelée est imbriquée dans plusieurs appels.
GetArgCount ?

47

Oui mais en passant par exemple une liste en argument d'une fonction ton code ne risque pas de s'arrêter à celui-ci plutôt qu'à celui de la fonction ?

GetArgCount : dans un apel comme f(g(mkarg(v(x,c),y,n),z),a,b) ça ramène quoi ? (mkarg étant la fonction C sachant toute l'expression est sur la pile ?

48

andoh_wilfried
: Oui mais en passant par exemple une liste en argument d'une fonction ton code ne risque pas de s'arrêter à celui-ci plutôt qu'à celui de la fonction ?

Non. next_expression_index traîte la liste entière comme une expression. C'est pour ça qu'il faut sauter le LIST_TAG à la main pour rentrer à l'intérieur de la liste.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

49

Et la lumière fût ! Il vit de nouveau claire.

Merci K.K.

50

./47: 3

51

merci à toi aussi PpHd

52

"Edit"

53

Que se passe t-il si on ajoute une variable à la pile quand elle est pleine ? (Error je suppose)

On fait comment pour regler ça ?

KK t'a dit que la pile fait environ 55ko.
Je suppose que top_estack a une valeur par défaut qui est restoré avant chaque appel.
faut donc que j'ajoute à ça la taille de la pile qui est constante pour savoir à partir d'où je ne peux plus écrire.

54

>On fait comment pour regler ça ?
On recupere les exceptions.

>Je suppose que top_estack a une valeur par défaut qui est restoré avant chaque appel.
Non

>faut donc que j'ajoute à ça la taille de la pile qui est constante pour savoir à partir d'où je ne peux plus écrire.
Que ? Areuh ? La taille de la pile est pas constante mais dynamique.

Tu peux pas travailler avec la pile estack proprement ? Ca sera plus simple, plus sur, et surement plus efficace.

55

Tu crois vraiment que c'est plus rapide de recuperer les arguments dans une structure, pour les réutiliser par la suite quand je peux les laisser dans la pile et les récupérer à volonté !
Surtout quand ces arguments ne serviront qu' une fois dans la majeure partie des cas !

Le problème c'est que je fait une Lib qui depose des résultats de tout type sur la pile ; qu'une autre fonction peut récupérer lorsqu'elle n'a pas le nombre d'arguments qu'il faut.

Je veux pas créer de structures pour sauver temporairement les résultats.
Du moins pour le moment ça me semble prendre de la place alors que l'estack est déjà alloué et donc disponible.
Bien sure je changerai d'avis s'il c'est plus rapide de faire autrement mais c'est pas sure !

Je sais que la pile est dynamique mais elle ne peut excéder une limite de taille ; de plus l'ESTACK est compris dans la Mémoire SYSTEM selon K.K.
Et surement je pense que top_estack en dehors de tout appel est à sa valeur d'initialisation.

Mais je trouverai bien la valeur maxi que peut prendre top_estack.

56

>Tu crois vraiment que c'est plus rapide de recuperer les arguments dans une structure, pour les réutiliser par la suite quand je peux les laisser dans la pile et les récupérer à volonté !
Je ne le crois pas. J'en suis meme sur.

>Le problème c'est que je fait une Lib qui depose des résultats de tout type sur la pile ; qu'une autre fonction peut récupérer lorsqu'elle n'a pas le nombre d'arguments qu'il faut.
END_TAG ?

> Et surement je pense que top_estack en dehors de tout appel est à sa valeur d'initialisation.
Je comprends pas cette phrase.

>Mais je trouverai bien la valeur maxi que peut prendre top_estack.
Facile. bottom_estack + 65512. Mais ensuite ?

J'ai vraiment l'impression que tu vas droit au mur avec ton programme neutral

57

Non ça marche impeccable avec ce system ; j'ai tester : la recup des arguments laissé sur la pile par d'autres fonc est impécable et je nettoie correctement l'estack avant de sortir.

J'ai effectuer les 1er test Hier soir et là j'implémente les fonctions standar.

Je comprends pas pourquoi tu dit que c'est plus rapide ta méthode. comparons :

soit la fonction de ma lib "text",STR_LIST,X_LIST,Y_LIST,FONT pour afficher du texte

Moi -> Je lis dans l'estack , et j'affiche au fur et à mésure
PpHd -> tu lis dans l'estack ,tu sauvegardes dans une structure, ensuite tu affiches


58

Le parcourt d'expression dans l'EStack est couteux. Evidemment si tu lis parcourts l'ensemble de tes arguments une seule fois, c'est pas plus couteux. Mais vu tes remarques, je me demande toujours ce que tu fais avec l'EStack pour necessiter tant de hacks.

59

Je vois Merci PpHd pour le bottom_estack + 65512 mais il ne me servira plus à rien !

En fait je pensais que avant chaque appel à la ligne de commande top_estack=bottom estack


j'ai pas fait gaffe au post
Kevin Kofler :
Non, tu ne peux pas effacer jusqu'à bottom_estack. Il peut y avoir aussi d'autres trucs sur la pile d'expressions:
* historiques
* autres appels dans la même ligne
...


Mais je me rend compte que je me trompe vu que les structures de contrôles (For , while et autres) laissent aussi des TAG et des PARAMETRES sur l'Estack.

Et on peut aussi faire un truc cochon du genre
f(..):Malib(..):daeddae
en apellant une seule fois la ligne de commande.

Bon Heureusement que je nettoie la pile en m'arrêtant au debut de l'appel de la Lib.

60

Vu que la Lib doit supporter
-les Boucles
-les indirections internes sur les variables
-modification des variables et eventuellement des compteurs sur lesquels porteront les boucles

Si je sauvegardais les arguments de la lib ça me ralentirai surement dans les boucles.
Mais je vais voir si dans certains cas une sauvegarde par allocation dynamique temporaire ne srait pas utile
en cas d'appels successif sans modification interne des arguments.

M'enfin ça reste à voir.