Bonjour,
Comment je peux initialiser une zone mémoire sans passer par la pile ?
J'ai essayé avec d'inliner ma fonctions mais passe toujours par la pile!!
Bonjour,
Comment je peux initialiser une zone mémoire sans passer par la pile ?
J'ai essayé avec d'inliner ma fonctions mais passe toujours par la pile!!
Bonjour,
Peux-tu préciser ta question s'il te plait? Donne nous un exemple appliqué si possible (Pourquoi tu veux faire ça exactement?).
Si tu veux que tes variables soient stockée dans les registres du micro processeur et non dans la pile tu peux utiliser le mot clé "register"
exemple :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part register short i, j;
Je déconseille d'utiliser register et encore plus de croire que la variable sera vraiment mise dans un registre ! Ce mot-clé est une simple indication pour le compilateur et ne donne aucune garantie. Le pourquoi est expliqué ici, au 3e paragraphe : http://c-faq.com/~scs/cclass/int/sx4ea.htmlEnvoyé par Neolex
Sans passer par la pile =Envoyé par Tilicht
1) ne pas du tout utiliser la pile (pour le stockage comme l'initialisation) ?
2) les variables ne sont pas stockées sur la pile ?
1) Ca veut dire que tu ne peux pas utiliser une fonction d'initialisation, donc il te reste les variables globales et statiques avec initialisation lors de la déclaration.
2) Tu peux utiliser les globales, les statiques, les allocations dynamiques et une fonction pour initialiser les valeurs.
l'idée est d'initialiser chaque bloc de données de 64 bit avec une valeur précise (surtout le bit 64 à 1), et sur une zone mémoire de 4 Ko par exemple.
voici la fonction que j'utilise:
avec cette fonction j'arrive à initialiser la zone mémoire, mais ça passe par la pile (pour chaque valeur de i et de l'adresse), donc des accès inutiles pour moi et ce qui prend du temps...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 inline void fct_null(uint32_t add, size_t size) { size_t i; volatile uint32_t *ptr; for(i=0;i<(size/8);i++) { ptr = (uint32_t*)(add + 0x4 + i*0x8); *ptr = 0x80000000; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 inline void fct_null( uint64_t *add, unsigned long size/*nombre de 64 bits*/) { static unsigned long i = 0; for(i=0; i<size; i++) { *(add+i) = 0x8000000000000000; } }
Dernière modification par Invité ; 30/09/2014 à 19h29.
Merci Ratator! c'est vraiment ce que je veux.
Maintenant avec ton code l'initialisation passe plus vite.
Mais, il reste un petit problème, il n'y a plus d'accès à la pile pour la donnée ou pour l'adresse, par contre l'indice ' i ' de la boucle utilise toujours la pile!
Est ce qu'il y a un moyen de ne pas passer par la pile pour cet indice aussi?
Partager