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 :

Besoin d'une confirmation sur le tas/pile


Sujet :

C

  1. #1
    Membre régulier
    Inscrit en
    mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 190
    Points : 83
    Points
    83
    Par défaut Besoin d'une confirmation sur le tas/pile
    Bonjour a tous!

    Ma question est la suivante :

    A l'aide d'un malloc, est-il possible d'allouer 1 2 3 ou 4 octets seulement ?

    J'ai lu que la taille des pointeurs était de 4 octets donc lorsque je fait un malloc(3), j'ai réservé 4 octets sur la pile pour mon pointeur plus 3 octets sur le tas. C'est ça ?

    C'est juste pour être sur...
    Pour mes développements, j'utilise :
    WinX-64bits, Delphi Tokyo 10.2.2
    Merci, merci, merci... moi aussi je vous aime, c'est trop d'émotions...
    Key user des blagues nulles

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2003
    Messages : 10 651
    Points : 15 698
    Points
    15 698
    Par défaut
    Quand tu fais malloc(3) tu alloues 3 octets sur le tas, oui. Par contre tu n'alloues pas 4 octets sur la pile. Ceux-ci sont alloués lorsque tu déclares ton pointeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char* c; // 4 octets sur la pile
    ...
    c = (char*)malloc(3); // 3 octets sur le tas

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2003
    Messages : 4 506
    Points : 5 606
    Points
    5 606
    Par défaut
    Quand tu fais un malloc tu reserves de la place sur le tas et non sur la pile

    Oui il est possible d'allouer 1 octect malloc(sizeof(char)) ; ou 2 ou 3 ou 4 ....

    Quand tu fais :

    char * pt ; <---------------tu vient de prendre 4 octects sur la pile

    pt = (char*) malloc(sizeof(char) )<----------je viens de reserver 1 octect sur le tas

    Je vois pas ou est le probleme
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  4. #4
    Membre régulier
    Inscrit en
    mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 190
    Points : 83
    Points
    83
    Par défaut
    Merci à vous pour ces précisions...
    C'est bien ce que je pensais mais je voulais avoir vos avis, n'étant pas sur de moi sur ce point...

    Avec vos affirmations, je peux écarter une cause de bug...

    Merci encore.
    Pour mes développements, j'utilise :
    WinX-64bits, Delphi Tokyo 10.2.2
    Merci, merci, merci... moi aussi je vous aime, c'est trop d'émotions...
    Key user des blagues nulles

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2002
    Messages : 290
    Points : 322
    Points
    322
    Par défaut
    En fait non un malloc ne peut pas reellement allouer 1 octet sur le tas, et ce pour une bonne raison, le systeme alloue la memoire avec des quantas, autrement dis, il y a un minimum pour l'allocation. Sur x86 cette limite mini est, me semble-t-il de 4 ou 8ko...

    donc la premiere fois que tu alloues 1 octet, il alloue le quanta minimum, puis la seconde fois, il n'alloue rien, il te donne un pointeur un peu plus loin sur la meme zone que précédement.... enfin j'espere...

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2003
    Messages : 4 506
    Points : 5 606
    Points
    5 606
    Par défaut
    Oui c'est vrai que le systeme n'est pas capable de te donner moins de 4kilos

    C'est également vrai pour la pile il gére ça par bloc de 4kilos
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 05/10/2009, 10h08
  2. Besoin d'une correction sur une requête
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/12/2007, 18h47
  3. besoin d'une précision sur le déploiement de fichiers
    Par NicoO_O dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 22/01/2007, 20h08
  4. Réponses: 5
    Dernier message: 10/01/2007, 09h38
  5. besoin d'une correction sur un exercice.
    Par phakso dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 03/03/2006, 10h01

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