Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1421 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Comment marche le C

n°920119
maerlin666
Posté le 10-12-2004 à 23:19:53  profilanswer
 

Reprise du message précédent :

Citation :

Il sait combien de bytes il doit lire, et de combien de bytes se déplacer dans un tableau pointé par ce type de pointeur.  


la question depuis le debut est comment sait il
 
a pardon j'avais pas vu

Citation :

Tu vois que la premiere affectation utilise un stw (store word), et ecrit donc 1 sur 32 bits a l'adresse int_ptr. La deuxieme affectation utilise un stb (store byte), et ecrit donc 1 sur 8 bits a l'adresse char_ptr.


en x86 ca fait quoi parce que je connait aucun des opcode pratiquement
et ce que je ne comprend pas c'est comment il fait la difference entre un int* et un char* pour ensuite decider de faire stwd ou stb


Message édité par maerlin666 le 10-12-2004 à 23:55:40
mood
Publicité
Posté le 10-12-2004 à 23:19:53  profilanswer
 

n°920145
maerlin666
Posté le 10-12-2004 à 23:57:39  profilanswer
 

je suis peut etre un peu bouché pardonnez moi
y'a un truc qui me titille ...

n°920153
matafan
Posté le 11-12-2004 à 00:03:08  profilanswer
 

Citation :

en x86 ca fait quoi parce que je connait aucun des opcode pratiquement


Quelques chose d'equivalent avec des noms differents. Ce qu'il faut comprendre c'est le principe ; le nom des mnemoniques ou les opcodes n'ont pas d'importance.
 

Citation :

ce que je ne comprend pas c'est comment il fait la difference entre un int* et un char* pour ensuite decider de faire stwd ou stb


Je ne comprend pas ce qui te pose probleme... Comment le compilateur fait la difference ? Ben dans un cas c'est marque "int" et dans l'autre c'est marque "char"  :) Il se souvient du type de ton pointeur, et quand tu l'utilises il connait donc la taille de ce qui est pointe. Si c'est ce que tu te demandes, non, pour la mecanique interne du compilateur, un pointeur n'est pas juste une variable qui contient une adresse. C'est une adresse plus le type de ce qui est pointe. Mais au final, dans ton binaire, un pointeur ce n'est plus qu'une case en memoire qui contient une adresse. Plus besoin de savoir la taille de ce qui est pointe : a chaque fois que le pointeur est utilise, le compilateur a genere une instruction qui lit/ecrit le bon nombre d'octets.


Message édité par matafan le 11-12-2004 à 00:07:22
n°920213
Lam's
Profil: bas.
Posté le 11-12-2004 à 09:09:54  profilanswer
 

maerlin666 a écrit :

[quote]et ce que je ne comprend pas c'est comment il fait la difference entre un int* et un char* pour ensuite decider de faire stwd ou stb


Le compilateur (par opposition à la norme C) sait qu'un char va être un BYTE, et qu'un int va être un WORD (16 bits dans ton environnement visiblement).
Donc, il va très intelligemment remplacer:

Code :
  1. char * pC = ....;
  2. int  * pI = ....;
  3. *pI = 12;
  4. *pC = 34;


par:

LES DI, pC
MOV AL,12
MOV ES:[DI], AL
;et
LES DI, pI
MOV AX,34
MOV ES:[DI], AX


 
Comme je l'ai dit, son système de typage interne sait automatiquement convertir les types C en taille mémoire adéquate, puisque pour chaque variable, il stocke son nom, sa valeur en cours (s'il y en a une), et sa taille.  
 
Note que de nos jours, on va un peu plus loin que le 16 bits. Sur une machine 64 bits, on a souvent :
char = 8 bits
short = 16 bits
int = 32 bits
long = 64 bits
pointeurs = 64 bits


Message édité par Lam's le 11-12-2004 à 09:10:43
n°920638
maerlin666
Posté le 11-12-2004 à 20:14:40  profilanswer
 

Je n'arrive pas a bien m'exprimer  
Je crois que ce que j'aimerais savoir se rapproche le plus de ca  
ma derniere reponse
 
http://forum.hardware.fr/hardwaref [...] 1219-1.htm
 

Citation :

Le compilateur (par opposition à la norme C) sait


il remplace donc par plusieur operations
 

Citation :

le nom des mnemoniques ou les opcodes n'ont pas d'importance.


Ben un peu quand meme


Message édité par maerlin666 le 11-12-2004 à 20:36:59
n°931313
maerlin666
Posté le 24-12-2004 à 00:49:26  profilanswer
 

Bon, je reviens a la charge avec mes questions ch|@#tes
je voulais savoir comment fonctionnait la portée des variables
pour celles crées sur la pile c'est comprehensible mais dans les autres cas?
Aussi ,que fait le mot clé static
 
PS: cher Emmanuel le pere noel viendra surement avec un exemplaire de  
la norme c ansi

n°931325
matafan
Posté le 24-12-2004 à 03:31:03  profilanswer
 

Quand tu accèdes depuis un module à une variable globale définie dans un autre module, c'est exactement comme dans le cas des fonctions externes. Il y a un sorte de "glue code" qui va chercher dans la TOC l'adresse de la variable.
 
"static" a deux sens. Pour une fonction, il sert a dire au compilo que la fonction n'est PAS appelée depuis d'autres modules. Elle est inconnue de l'extérieur. Pour les variables locales, ca sert a dire que la variable continue d'exister meme après le retour de la fonction. La variable en question n'est bien sûr pas dans la pile.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Url rewriting ne marche pas chez moiOuvrir un lien dans une fenetre séparé ? marche pas sous IE
JScrollPane(JPanel) = marche pô!background: blablabla fixed... IE ça marche pas ?
Code tout bête qui marche pas sous FireFox (??)foreach qui marche pas
[CSS] margin-bottom ... ca marche pas ?mon site ne marche pas avec internet explorer
intégrité référentielle (trigger) qui marche pas 
Plus de sujets relatifs à : Comment marche le C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR