Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1961 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Initialisation à zéro d'une grosse matrice en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Initialisation à zéro d'une grosse matrice en C

n°1509404
yak6942
Posté le 01-02-2007 à 04:34:30  profilanswer
 

Salut a tous,
 
Comment faire pour initialiser une matrice [1000]*[1000] avec des 0 en C?
 
Est ce que le fait de la déclarer, met ses éléments a zéro ou bien faut faire une double boucle pour mettre chaque element à zéro?
 
merci,
 

mood
Publicité
Posté le 01-02-2007 à 04:34:30  profilanswer
 

n°1509405
tbp
Posté le 01-02-2007 à 06:01:57  profilanswer
 

memset

n°1509413
Trap D
Posté le 01-02-2007 à 08:34:42  profilanswer
 

int mat[1000][1000] = {0};

n°1509424
Taz
bisounours-codeur
Posté le 01-02-2007 à 09:15:17  profilanswer
 

ce genre de saloperie alloué sur la pile, c'est la route vers l'échec. Fais une allocation dynamique avec calloc. Et si t'es intelligent, tu peux le faire avec 1 seul calloc

n°1510376
pfuitt
Posté le 03-02-2007 à 10:55:58  profilanswer
 

Taz a écrit :

ce genre de saloperie alloué sur la pile, c'est la route vers l'échec. Fais une allocation dynamique avec calloc. Et si t'es intelligent, tu peux le faire avec 1 seul calloc


 
Tss tssss
ca aurai rien a voir avec de l'intelligence mais plutot avec une bonne connaissance de la reprensetation des tableaux en mémoire...
 
intelligence =/= de connaissance... arretons de snober ceux qui ne voit pas les optimisations

n°1510378
Taz
bisounours-codeur
Posté le 03-02-2007 à 11:04:07  profilanswer
 

euh je snob personne. C'était le ton du défi.  'est un fait, il y a une manière plus chouette que l'autre de le faire. Seulement il faut se creuser un peu les méninges.

n°1510400
Sve@r
Posté le 03-02-2007 à 12:55:47  profilanswer
 

Taz a écrit :

Fais une allocation dynamique avec calloc. Et si t'es intelligent, tu peux le faire avec 1 seul calloc


Est-ce vraiment important de se forcer à travailler en 1 dim si le C nous offre la possibilité de travailler en 2 dim ? On sait très bien qu'au bout du compte il n'y a qu'une dim finale mais puisque c'est le compilo qui fait la translation pour nous...?


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1510428
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-02-2007 à 14:35:55  profilanswer
 

Sve@r a écrit :

Est-ce vraiment important de se forcer à travailler en 1 dim si le C nous offre la possibilité de travailler en 2 dim ? On sait très bien qu'au bout du compte il n'y a qu'une dim finale mais puisque c'est le compilo qui fait la translation pour nous...?


La taille étant fixe, on peut très bien définir un tableau à 2 dimensions en 1 seul malloc() (ou calloc). Il suffit d'utiliser le bon type... (tableau de tableau...)

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. typedef int T[10];
  5. void print (T * p, size_t n)
  6. {
  7.    size_t i;
  8.    for (i = 0; i < n; i++)
  9.    {
  10.       size_t j;
  11.       for (j = 0; j < n; j++)
  12.       {
  13.          printf ("%3d", p[i][j]);
  14.       }
  15.       printf ("\n" );
  16.    }
  17.       printf ("\n" );
  18. }
  19. int main (void)
  20. {
  21.    T *p = NULL;
  22.    size_t n = sizeof *p / sizeof **p;
  23.    p = calloc (sizeof *p, n);
  24.    if (p != NULL)
  25.    {
  26.       print (p, n);
  27.       memset (p, -1, sizeof *p * n);
  28.       print (p, n);
  29.    }
  30.    return 0;
  31. }


Je ne suis pas sûr que ce code soit portable, mais ça donne l'idée...


Message édité par Emmanuel Delahaye le 03-02-2007 à 14:53:02

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1510562
Taz
bisounours-codeur
Posté le 04-02-2007 à 11:54:06  profilanswer
 

Sve@r a écrit :

Est-ce vraiment important de se forcer à travailler en 1 dim si le C nous offre la possibilité de travailler en 2 dim ? On sait très bien qu'au bout du compte il n'y a qu'une dim finale mais puisque c'est le compilo qui fait la translation pour nous...?


En terme de localité de référence, j'ai eu l'occasion de comparer et la différence est très visible.
 
Et le code d'Emmanuel est crucial. Imagine une vecteur de 10000 {x, y z}. Si tu alloues 10000 pointeurs puis 10000 * 12aine d'octets, tu fais un massacre.  En localité de référence et parce que dans un cas, l'adressage est direct et dans l'autre non.
 
Enfin c'est juste de l'expérience. Et le code d'Emmanuel est plus simple je trouve toutes façons quand on connaît une dimension.

n°1510570
Sve@r
Posté le 04-02-2007 à 12:53:36  profilanswer
 

Taz a écrit :

...et parce que dans un cas, l'adressage est direct et dans l'autre non.


C'est vrai que si l'ensemble est contiguë ça doit être plus rapide que si l'ensemble à la forme d'un plat de nouilles...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 04-02-2007 à 12:53:36  profilanswer
 

n°1510581
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-02-2007 à 13:54:40  profilanswer
 

Sve@r a écrit :

C'est vrai que si l'ensemble est contiguë ça doit être plus rapide que si l'ensemble à la forme d'un plat de nouilles...


Pas sûr...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1510714
Trap D
Posté le 04-02-2007 à 22:35:24  profilanswer
 
n°1510738
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-02-2007 à 23:54:20  profilanswer
 

Trap D a écrit :

Developpe ...


Il faut faire des mesures, mais entre indirections et calculs d'adresses, je ne sais pas quel est le pire....
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1510775
Joel F
Real men use unique_ptr
Posté le 05-02-2007 à 08:33:45  profilanswer
 

Ca dépend fortement des architectures.

n°1510781
Taz
bisounours-codeur
Posté le 05-02-2007 à 09:04:14  profilanswer
 

Euh dans un cas, c'est un calcul d'adresse et une indirection et dans l'autre c'est juste un calcul d'adresse.
 
Mais en cache trashing, y a pas photo. Et en consommation mémoire aussi.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Initialisation à zéro d'une grosse matrice en C

 

Sujets relatifs
matrice statique et dynamique[Résolu] [MySQL] Problème nombre commençant par zéro
passage de matrice en parametre[Résolu] Matrice et fonctions
[C] Des accolades "just pour le fun" ?Division par zéro
inverse matrice en cLe site du zero
un algo pour des éléments identiques d'une matriceConstucteur et initialisation
Plus de sujets relatifs à : Initialisation à zéro d'une grosse matrice en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR