Bonjour
J'utilise TIGCC 0.96 et je programme en c (ti89 titanium).
Je crée crée un jeu avec lequel on peut jouer contre un adversaire géré par le programme
l'algorithme qui fait jouer l'adversaire utilise une fonction recursive qui teste touts les coups possibles et garde celui qui aboutit à la mailleure configuration
En pratique cela fonctionne pas mal et tres rapidement, mais lorsque la fonction doit s'apeller recursivement plus de 4 fois la calculatrice plante (invalid instruction - barre noire).
La fonction s'appelle avec en parametre un tableau tridimensonnel de 512 type short.
Est-ce qu'il y a une limite de memoire ? Si oui peut-on la repousser ?
hibou Le 09/06/2005 à 22:15 c'est peut-être effectivement un problème de mémoire si ton tableau est alloué sur la pile. Je sais plus de combien est la taille de la pile, mais si à chaque appel tu bouffe 1ko, s'est sur que ca fait beaucoup.
Alloue ton tableau avec malloc et free plutot que de la prendre sur la pile.
oui mais peut-on implémenter malloc et free en recursif ?
la calculatrice dispose de 192 ko de memoire vive. le compilateur limite-t-il la memoire allouée au programme ?
puisque si je reprends to raisonnement avec 4 appels 4*1ko on est loin du 192.
enfin qu'est ce que la pile ?
merci hibou
le probleme c'est alors d'implanter la gestion de memoire malloc / free dans ma recursivité.
la fonction s'appelle avec une structure de données regroupant chaque cas.
comment gérer alors l'allocation dynamique dans ce cas ?
merci hibou pour ces précisions
hibou Le 09/06/2005 à 22:35 La, je sais pas trop de quoi tu causes, donc je peux pas trop t'aider. Il faudrait que tu me détailles un peu plus ton algo, que tu mettes meme le code (cf le lien "sources" à droite quand tu veux poster un message)
Jyaif Le 09/06/2005 à 22:59 Tu peux virer "SAVE_SCREEN" -> ça bouffe 3840 octets sur la pile
2 solutions:
-tu force le refresh (il y a un topic qui en parle actuellement sur yN)
-tu copie manuellement la zone écran dans une zone allouée.
voila g posté mon code plus hat (foutues balises........)
en fait basiquement c ca
void fonction(node)
{
nodesuivante node;
for( i=1 jusqu'a 8)
{
modifications sur nodesuivante
fonction(nodesuivante)
{
}
avec la strucure node qui contient un tableau tridimentionnel de environ 500 entiers short
pathnode est declarée dans une fonction englobant la fonction recursive.
pourquoi faut-il que ce soit des pointeurs ?
je vois pas ce que ca change en terme d'utilisation de la memoire.
d'accord la fonction s'executera plus vite mais les variables sur lesquelles pointent les pointeurs devront toujours etre crees.
je ne comprends pas l'utilité de memcpy
merci pour vos messages
ah ouaaaaaaaaaais !
merci beaucoup hibou
d'accord ca y est g compris.
mais quelqu'un peut m'en dire un peu plus sur les commandes malloc/free/memcpy ?
hibou>c vrai là j'abuse de votre gentillesse
ben j'vais me debrouiller avec tout ca alors
merci beaucoup les gens hibou, sasume, jfg
PpHd Le 10/06/2005 à 09:19 En plus comme tu passes tes valeurs par copie, tu copie 2x tes arguments sur la pile. Pas etonnnant que ca plante si vite.
(En plus d'etre hyper lent).
Sasume Le 10/06/2005 à 10:46Edité par Sasume le 10/06/2005 à 10:50 (*tmpnode).x ?
Sinon : tmpnode->x.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
PpHd Le 10/06/2005 à 10:48 tmpnode->x our (*tmpnode).x