j'ai écris un code en fortran 90 et j'ai récemment décidé de lui ajouter une belle
interface gtk. Rien de plus simple pourrait on dire ... au détail près qu'il faut que je
'traduise' mon code fortran en C. Connaissant le langage C je ne m'inquiète pas
trop pour autant .. toute fois une question me démange:
Dans mon code en fortran j'alloue la mémoire dynamiquement de façon casi-systématique.
Ceci est très facile en fortran y compris pour les tableaux de dimensions multiples.
Je sais bien comment gérer mon déplacement dans
des tableaux à dimension multiples en fortran et/ou en C.
Par exemple pour un tableau déclaré de façon générique en C:
int TAB[100][100][100];
for (i=0;i<100;i++){
for (j=0;j<100;j++){
for (k=0;j<100;k++){
TAB[i][j][k]=1;
}
}
}
Toutefois j'ai observé que l'allocation dynamique de tableaux à dimension multiples en C
était un chouilla plus complexe que celle du fortran et en particulier consiste en une allocation successive de tableau de pointeurs:
int ***TAB;
CALLOC(TAB, int**, 100);
for (i=0; i<100; i++){
CALLOC(TAB[i],int*,100);
for (j=0; j<100; j++){
CALLOC(TAB[i][j],int,100);
}
}
(Je passe sur la définition de la macro CALLOC)
... ma question est la suivante l'allocation de mémoire ce fait elle comme dans le premier cas ?
c'est à dire dans des zones contigues, auquel cas puis-je donc me déplacer dans le tableau comme dans mon premier exemple ?
ou bien y a t'il une subtilité dans ce cas précis .. dans mon code je manipule de très gros tableaux un mauvaise manipulation
sur ces tableaux pourrait avoir un effet conséquent sur le temps de calcul.
Merci de votre aide
# Tu peut jouer avec la version rapide
Posté par dguihal . Évalué à 2.
int ***TAB;
TAB = (int ***) malloc (100 * 100 * 100 * sizeof(int));
Ce dont je ne souviens plus, c'est si les données sont rangées horizontalement :
TAB[0][0][0] || TAB[0][0][1] || TAB[0][0][2] ||
ou verticalement :
TAB[0][0][0] || TAB[1][0][0] || TAB[2][0][0] ||
[^] # Re: Tu peut jouer avec la version rapide
Posté par dguihal . Évalué à 3.
Bien sûr le mieux c'est de créer des fonctions (ou macros) pour gérer ça
[^] # Re: Tu peut jouer avec la version rapide
Posté par gaaaaaAab . Évalué à 1.
# pilib : binding Gtk/Fortran
Posté par Romain Ballais . Évalué à 2.
http://sourceforge.net/projects/pilib
http://pilib.beta-centauri.de/
Avec une documentation en français:
http://pilib.beta-centauri.de/index.php?title=French_Documen(...)
Mais, car il y a toujours un "mais", ce projet n'est qu'au stade alpha, ce n'est peut-être donc pas assez stable/robuste pour ce que tu as à faire.
Je ne développe pas en Fortran, donc je ne saurais te dire.
[^] # Re: pilib : binding Gtk/Fortran
Posté par Sébastien Le Roux (site web personnel) . Évalué à 1.
septique car je ne pense pas que gfortran soit assez fiable (en F90) pour supporter
cela.
Mais merci bien !
# Appeller le fortran depuis le C?
Posté par Pascal . Évalué à 5.
Je ne connais pas du tout le fortran et je n'ai aucune idée sur la faisabilité de la chose. Mais je pense que cette piste vaut le coup d'etre creusée. Cette solution permet de garder un code stable et validé tel quel sans devoir passer par la case écriture, déboguage, déboguage mémoire....
[^] # Re: Appeller le fortran depuis le C?
Posté par Sébastien Le Roux (site web personnel) . Évalué à 1.
Enocre merci.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.