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 :

Indexation et pointeurs


Sujet :

C#

  1. #1
    Membre régulier Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 112
    Points
    112
    Par défaut Indexation et pointeurs
    Bonjour,

    Soit un tableau A uint[] (d'une aille d'environ deux-mille valeurs).
    Soit un tableau B ushort[] dans lequel sont stockés des indexs designant des valeurs du tableau A

    Par exemple:

    A uint[] {1000,2000,3000,4000}
    B ushort[] {1,3}


    Est-ce que c# va mettre un pointeur 32bit derrière chaque ushort de ma liste B ?

    Dans ce cas ne serais-il pas "mieux" de drectement stocker les valeurs du tableau A dans le Tableau B (au lieu de procéder par indexation) ?

    Merci d'avance pour vos réponse et bon samedi!
    XOR Onlava, Onlava

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par Onlava Voir le message
    Est-ce que c# va mettre un pointeur 32bit derrière chaque ushort de ma liste B ?
    Tu auras une référence sur le tableau (qui est un type référence donc) mais pas sur les éléments. En .Net le principe doit être comme en C quand on apprend les pointeurs, bien que je ne me sois jamais posé la question.

    Quand tu instancies ton tableau, tu indique un nombres d'élements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Tableau instancié et initialisé avec 4 entiers
    int[] tab1 = new uint[] {1000,2000,3000,4000};
    // Tableau instancié pour 5 entiers
    int[] tab2 = new int[5];
    A ce moment le système réserve la mémoire pour la taille indiquée, et on récupère une référence sur le premier élement, la référence du tableau (tab1 et tab2). Après connaissant la taille des éléments (int = 4 octets) il est facile d'accéder à chaque élément à partir de la référence au premier élément.

    Si les éléments ne sont plus des types valeur mais des types référence c'est pareil, car une référence est "codée" sur une taille fixe et on peut ainsi accéder à chaque référence des éléments depuis la référence du tableau.

    En espérant que je n'ai pas dit de bétises, que ce soit assez clair et que ca réponde à ta question ^^
    Pas de questions techniques par MP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Bonjour,

    je viens de tester et apparement, bien que le stockage des valeurs soit (du moins a l'air) contigu, en fait int[] truc = ... n'est pas l'adresse du premier element, d'ailleurs en unsafe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int[] truc = new int[5];
    int* ptr = truc; //NOOK (cannot convert from int[] to int*)
    int* ptr = &truc[0]; //OK
    En regardant un peu sur le net,

    Array types form a hierarchy, with all array types inheriting from the type System.Array. This is an abstract class that represents all arrays regardless of the type of their elements, their rank, or their upper and lower bounds. The VES creates one array type for each distinguishable array type.
    Bref apparement truc != &truc[0]

    Pour l'OP:

    le seul int que tu auras dans l'utilisation d'un ushort[], c'est pour l'index, pour tout le reste, tout se fera en uint16.

  4. #4
    Membre régulier Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Points : 112
    Points
    112
    Par défaut
    le seul int que tu auras dans l'utilisation d'un ushort[], c'est pour l'index, pour tout le reste, tout se fera en uint16.
    Génial! merci à vous deux
    XOR Onlava, Onlava

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/04/2009, 10h52
  2. [Driver] Modification d'un tableau via un pointeur et un registre d'index
    Par Voldemort09 dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 08/02/2009, 12h04
  3. Réponses: 19
    Dernier message: 09/04/2008, 14h17
  4. Réponses: 5
    Dernier message: 07/11/2007, 15h14
  5. [Technique] Intérêt des index
    Par ddams dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 04/11/2002, 15h11

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