Un topic intéressant?
Merci, seigneur!
JYY a raison sur ce point, je crois, quoique je n´en suis pas sur à 100%.
" Que se passe il ? Le compilateur alloue il un espace mémoire pour " Hello ! " ? "
Le principe pour des programmes de type PE ( portable executable, soit ce que tu es habitué si tu es sous windows) est d´avoir un, si on veux endroit où stoker des constantes, qui sera loadé intégralement en mémoire par l´OS. Elle s´appelle " .rdata".
Le compilateur se permet alors de mettre des chaines de caractères explicites comme ça dans cette zone.
" Cet espace est il libéré à la sortie du bloc de déclaration ( comme une variable automatique ) ? "
Le pointeur le sera, étant sur 32 bits. La chaîne, elle, ne le sera pas, elle est dans une zone " constants".
"
char *test( void )
{
return " Hello ! "
}
"
Ça peux dépendre énormément de ton compilo, mais en gros, le return " Hello!" retournera un pointeur vers cette zone de mémoire constante.
Je ne crois pas que c´est accepté selon la norme ANSI, mais si ça l´était ou l´est, cela signifierait une chose particulière; cette zone de mémoire n´a pas de notions de " scope", de blocs: elle est donc globale, si on veux.
" La chaine " Hello ! " est elle conservée en mémoire à ma sortie de la boucle ? "
Tout à fait. Elle le sera tout le long du programme en fait. Elle le sera même, si on extrapole, avant que le programme roule ^^
" Si oui comment est elle désalouée ? "
N/A. Le mécanisque de désallocation de cette zone, par contre, est dépendante de l´OS.
" Sinon, si cette chaine est effacée à la sortie de la boucle ( comme les variable automatiques ) , comment fonctionnent les fonction du type strcat(...) qui retournent une chaine ? "
Elle ne l´est pas. Quant à strcat, le principe est que la chaîne créée l´est dans le Heap ( Principe d´allocation et désallocation de mémoire), puisque nous ne pouvons pas savoir d´avance quel sera la taille des chaînes à assembler. Une exception serait des chaînes constantes de la zone " constants" uniquement, mais cela ne serait valable qu´avec une autre strcat surchargée basée uniquement sur les constantes, quelque chose d´hyper dépendant du compilo.
J´espère avoir pu t´éclaircir ces points.
Kelios
---------