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

Langage Delphi Discussion :

Stocker un maximum de booléens dans un minimum de place


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 53
    Points : 50
    Points
    50
    Par défaut Stocker un maximum de booléens dans un minimum de place
    voila le probleme.
    j'ai a stocker un grand nombre de booleen (128) pour un objet.
    je pourrais, bien sûr, utiliser un tableau array[1..128] of boolean, mais voila, ca coute cher en memoire (128 octets). Sachant que mon objet sera multiplié en tres grand nombre (+ de 20000) je prefere jouer la carte de l'optimisation (et puis c'est ca qui est passionant, aussi).

    La methode que j'ai déjà utilisé pour stocker, cette fois ci, 32 booleens était tout d'utiliser tout simplement un cardinal. (4 octet au lieu de 32)
    je lisais les valeurs comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function return_boolid_value(value:cardinal;id:byte):boolean;
    begin
        result :=  value shr id and 1 = 1;
    end;
    id etant l'indice de mon boolean dans mon tableau "virtuel".

    mais voila, comment faire pour 128 bit?
    mon premiere idée est d'utiliser un array[1..4] of cardinal qui stockerait successivement les valeurs booleennes 1..32 puis 33.. 64 etc... et serait ensuite lu par une routine spécifique.

    mais je me demandais s'il n'y avais pas un moyen de creer, plus simplement un block de 128 bits (16 octets) et de lire les valeur binaires dedans (indicés de 1 à 128)... et si oui comment faire?

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut Re: [Routine]stockage de booleen
    Salut
    Citation Envoyé par tixu
    je pourrai bien sur utiliser un tableau
    array[1..128]of boolean, mais voila, ca coute cher en memoire (128 octets). Sachant que mon objet sera multiplié en tres grand nombre (+ de 20000)
    étant donnée la capacité actuelle des mémoires vives, 128 octets x 20000 =2.44Mo, c'est quand même peu... Non? Est-ce vraiment nécessaire de se prendre la tête la-dessus?
    Si c'est pour apprendre par contre, là c'est bien

    Pour ta méthode, c'est possible, il faut que tu trouves un entier non signé de 16 bits et que tu écrives une procédure de conversion en binaire... Pour cela, fais une recherche sur le forum, la question y a déjà été posée...

    Bonne chance
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    oups
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Je crois que je me suis mal exprimé, je cherche de quoi creer un bloc de 128 bit (16 octet donc) pour y lire les valeurs bit a bit.
    L'entier le plus grand que j'ai trouvé est le int64 codé sur 64 bit (8 octets) de plus il est signé...


    @Pedro, je sais bien que je pourrai jouer la carte de la puissance disponible pour resoudre le probleme, mais, ca m'amuse plus de chercher comment optimiser le truc

  5. #5
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut

    S'il est signé, c'est juste un 0 ou un 1 en plus qui dit oui ou non ce nombre est négatif, rien ne t'empêche d'utiliser ce bit pour autre chose...

    Et puis tu n'as qu'à utiliser 2 Int64... Comme ça tu as 128 bits...

    Bonne chance
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Ok merci

    J'en conclu qu'a première vu, on est obligé de passer par des "sous blocs"...
    Que je traite 4x4 octet ou 2x8 revient à peu pres au même...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    eh oui, à moins d'attendre d'avoir des ordis 128 bits (et plus si jamais tu veux passer à 256 bits, etc...)
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

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

Discussions similaires

  1. Booléen dans une requête
    Par grrd dans le forum Access
    Réponses: 6
    Dernier message: 11/01/2006, 11h23
  2. Comment stocker des petites images (160x120) dans MSACCESS ?
    Par colorid dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/01/2006, 10h54
  3. stocker les nom de fichiers dans une base
    Par Corben dans le forum Windows
    Réponses: 2
    Dernier message: 04/01/2006, 15h50
  4. [Création de compo] Stocker une TList de records dans un dfm
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 6
    Dernier message: 29/10/2004, 11h01
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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