IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

écrire dans la mémoire sans passer par la pile!


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut écrire dans la mémoire sans passer 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!!

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 14
    Par défaut
    Bonjour,

    Peux-tu préciser ta question s'il te plait? Donne nous un exemple appliqué si possible (Pourquoi tu veux faire ça exactement?).

  3. #3
    Membre éclairé Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Par défaut
    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 :

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Neolex
    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"
    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.html

    Citation Envoyé par Tilicht
    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!!
    Sans passer par la pile =
    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.

  5. #5
    Membre éclairé Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Par défaut
    Citation Envoyé par Bktero Voir le message
    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.html
    .
    D'accord merci pour l'info ! Les profs disent vraiment n'importe quoi parfois...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    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:

    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;
    	}
    }
    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...

  7. #7
    Invité
    Invité(e)
    Par défaut Sa ne serait pas mieux d'ecrire
    Citation Envoyé par tilicht Voir le message
    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:

    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;
    	}
    }
    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
    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.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    Citation Envoyé par Ratator Voir le message
    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;
        }
    }
    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?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un fichier text dans un mail sans passer par le disque dure
    Par Michael.RHAN dans le forum Lotus Notes
    Réponses: 4
    Dernier message: 25/06/2015, 09h37
  2. Réponses: 3
    Dernier message: 02/05/2014, 11h47
  3. Réponses: 2
    Dernier message: 03/09/2013, 16h04
  4. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 00h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo