• Aucun résultat trouvé

Allocation contig¨ue

N/A
N/A
Protected

Academic year: 2022

Partager "Allocation contig¨ue"

Copied!
23
0
0

Texte intégral

(1)

Allocation contig¨ ue

Yanis Zatout

Octobre 2019

(2)

Allocation contig¨ ue: Avantages

L’acc` es ` a coˆ ut r´ eduit aux cases m´ emoires d’une structure de donn´ ees

Seule la premi` ere case de la matrice statique est n´ ecessaire L’ajout et le retrait d’´ el´ ements tr` es facilement

Facile ` a d´ etruire

(3)

Allocation contig¨ ue: Avantages

L’acc` es ` a coˆ ut r´ eduit aux cases m´ emoires d’une structure de donn´ ees

Seule la premi` ere case de la matrice statique est n´ ecessaire

L’ajout et le retrait d’´ el´ ements tr` es facilement

Facile ` a d´ etruire

(4)

Allocation contig¨ ue: Avantages

L’acc` es ` a coˆ ut r´ eduit aux cases m´ emoires d’une structure de donn´ ees

Seule la premi` ere case de la matrice statique est n´ ecessaire L’ajout et le retrait d’´ el´ ements tr` es facilement

Facile ` a d´ etruire

(5)

Allocation contig¨ ue: Avantages

L’acc` es ` a coˆ ut r´ eduit aux cases m´ emoires d’une structure de donn´ ees

Seule la premi` ere case de la matrice statique est n´ ecessaire L’ajout et le retrait d’´ el´ ements tr` es facilement

Facile ` a d´ etruire

(6)

Allocation contig¨ ue: allocation statique

Lorsqu’on alloue une matrice de fa¸ con statique, l’allocation est contig¨ ue, exemple:

Sortie

1 2 3

4 5 6

(7)

Allocation contig¨ ue: allocation statique

Lorsqu’on alloue une matrice de fa¸ con statique, l’allocation est contig¨ ue, exemple:

1

i n t A[ 2 ] [ 3 ] = { { 1 , 2 , 3 } , { 4 , 5 , 6} } ;

2

f o r ( i =0; i <r o w s ; i++)

3

f o r ( j =0; j <c o l s ; j ++)

4

p r i n t f ( " %4 d " ,A [ i ] [ j ] ) ;

5

p r i n t f ( "\n" ) ;

6

}

Sortie

1 2 3

4 5 6

(8)

Allocation contig¨ ue: allocation statique

Lorsqu’on alloue une matrice de fa¸ con statique, l’allocation est contig¨ ue, exemple:

1

i n t A[ 2 ] [ 3 ] = { { 1 , 2 , 3 } , { 4 , 5 , 6} } ;

2

f o r ( i =0; i <r o w s ; i++)

3

f o r ( j =0; j <c o l s ; j ++)

4

p r i n t f ( " %4 d " ,A [ i ] [ j ] ) ;

5

p r i n t f ( "\n" ) ;

6

}

Sortie

1 2 3

4 5 6

(9)

Allocation contig¨ ue allocation statique

De mˆ eme cette, fois en parcourant la matrice avec un pointeur:

Sortie

1 2 3

4 5 6

(10)

Allocation contig¨ ue allocation statique

De mˆ eme cette, fois en parcourant la matrice avec un pointeur:

1

pA=&(A [ 0 ] [ 0 ] ) ;

2

f o r ( i =0; i <r o w s ; i ++){

3

f o r ( j =0; j <c o l s ; j ++){

4

p r i n t f (" %4 d " , ∗ pA ) ;

5

pA++; // On p a s s e a l ’ a d r e s s e s u i v a n t e

6

}

7

p r i n t f ( "\n" ) ;

8

}

Sortie

1 2 3

4 5 6

(11)

Allocation contig¨ ue allocation statique

De mˆ eme cette, fois en parcourant la matrice avec un pointeur:

1

pA=&(A [ 0 ] [ 0 ] ) ;

2

f o r ( i =0; i <r o w s ; i ++){

3

f o r ( j =0; j <c o l s ; j ++){

4

p r i n t f (" %4 d " , ∗ pA ) ;

5

pA++; // On p a s s e a l ’ a d r e s s e s u i v a n t e

6

}

7

p r i n t f ( "\n" ) ;

8

}

Sortie

1 2 3

4 5 6

(12)

Allocation contig¨ ue: allocation d’un tableau de taille dynamique

La m´ emoire allou´ ee dynamiquement avec les fonctions calloc, malloc ou realloc est toujours contig¨ ue:

1

i n t t a i l l e T a b = 5 ;

2

i n t ∗ t a b = ( i n t ∗ ) m a l l o c ( t a i l l e T a b ∗ s i z e o f ( i n t ) ) ;

3

i n t ∗ pTab = t a b ;

4

f o r ( i n t i = 0 ; i < t a i l l e T a b ; i ++){

5

p r i n t f ( "& tab [% d ]=%p , pTab =% p\n" , i ,& t a b [ i ] , pTab ) ;

6

pTab++;

7

}

Sortie

&tab[0]=0x55f6931df260, pTab=0x55f6931df260

&tab[1]=0x55f6931df264, pTab=0x55f6931df264

&tab[2]=0x55f6931df268, pTab=0x55f6931df268

&tab[3]=0x55f6931df26c, pTab=0x55f6931df26c

&tab[4]=0x55f6931df270, pTab=0x55f6931df270

(13)

Allocation contig¨ ue: allocation d’un tableau de taille dynamique

La m´ emoire allou´ ee dynamiquement avec les fonctions calloc, malloc ou realloc est toujours contig¨ ue:

1

i n t t a i l l e T a b = 5 ;

2

i n t ∗ t a b = ( i n t ∗ ) m a l l o c ( t a i l l e T a b ∗ s i z e o f ( i n t ) ) ;

3

i n t ∗ pTab = t a b ;

4

f o r ( i n t i = 0 ; i < t a i l l e T a b ; i ++){

5

p r i n t f ( "& tab [% d ]=%p , pTab =% p\n" , i ,& t a b [ i ] , pTab ) ;

6

pTab++;

7

}

Sortie

&tab[0]=0x55f6931df260, pTab=0x55f6931df260

&tab[1]=0x55f6931df264, pTab=0x55f6931df264

&tab[2]=0x55f6931df268, pTab=0x55f6931df268

&tab[3]=0x55f6931df26c, pTab=0x55f6931df26c

&tab[4]=0x55f6931df270, pTab=0x55f6931df270

(14)

Allocation non contigue: comment faire?

On suppose que l’utilisateur pourra donner les valeurs de N et M qui seront les dimentions de la matrice

Pour allouer une matrice de fa¸ con contig¨ ue seulement selon ses colonnes, il faut:

Allouer les N lignes de la matrice de fa¸ con contig¨ ue

Allouer ` a chaque ligne M colonne de fa¸ con contig¨ ue cette fois aussi

Ceci vient du fait qu’une matrice n’est qu’un tableau contenant en

chaque cases des tableaux. Ce sont donc des tableaux en 2D.

(15)

Allocation non contigue: comment faire?

On suppose que l’utilisateur pourra donner les valeurs de N et M qui seront les dimentions de la matrice

Pour allouer une matrice de fa¸ con contig¨ ue seulement selon ses colonnes, il faut:

Allouer les N lignes de la matrice de fa¸ con contig¨ ue

Allouer ` a chaque ligne M colonne de fa¸ con contig¨ ue cette fois aussi

Ceci vient du fait qu’une matrice n’est qu’un tableau contenant en

chaque cases des tableaux. Ce sont donc des tableaux en 2D.

(16)

Allocation non contigue: comment faire?

On suppose que l’utilisateur pourra donner les valeurs de N et M qui seront les dimentions de la matrice

Pour allouer une matrice de fa¸ con contig¨ ue seulement selon ses colonnes, il faut:

Allouer les N lignes de la matrice de fa¸ con contig¨ ue

Allouer ` a chaque ligne M colonne de fa¸ con contig¨ ue cette fois aussi

Ceci vient du fait qu’une matrice n’est qu’un tableau contenant en

chaque cases des tableaux. Ce sont donc des tableaux en 2D.

(17)

Allocation non contig¨ ue: comment faire?

Le code:

1

temp− >v a l = ( d o u b l e ∗∗ ) c a l l o c (N, s i z e o f ( d o u b l e ∗ ) ) ;

2

f o r ( i n t i = 0 ; i < N; i++ )

3

temp− >v a l [ i ] = ( d o u b l e ∗ ) c a l l o c (M, s i z e o f ( d o u b l e ) ) ;

(18)

Allocation contig¨ ue: principe

Question: Comment allouer de fa¸ con contig¨ ue en gardant toujours

la notation ` a 2 entr´ ees (tab[i ][j ])?

(19)

Allocation contig¨ ue: principe

Question: Comment allouer de fa¸ con contig¨ ue?

(20)

Question: Comment allouer de fa¸ con contig¨ ue en gardant toujours

la notation ` a 2 entr´ ees (tab[i ][j ])?

(21)
(22)

Allocation contig¨ ue: exemple de code

Code ”simple”:

1

d o u b l e ∗∗ v a l = ( d o u b l e ∗ ∗ ) m a l l o c (N∗ s i z e o f ( d o u b l e ∗ ) ) ;

2

d o u b l e ∗ x = ( d o u b l e ∗ ) c a l l o c (N∗M, s i z e o f ( d o u b l e ) ) ;

3

f o r ( i n t i = 0 ; i < N; i ++)

4

v a l [ i ] = x +i ∗M;

(23)

Allocation contig¨ ue: exemple de code inutilement complexe

Code assez compliqu´ e qui effectue la mˆ eme tˆ ache:

1

d o u b l e ∗ tmp ;

2

i n t i ;

3

tmp = ( d o u b l e ∗ ) m a l l o c (N∗M∗ s i z e o f ( d o u b l e ) ) ;

4

(∗ p t r ) = ( d o u b l e ∗ ∗ ) m a l l o c (N∗ s i z e o f ( d o u b l e ∗ ) ) ;

5

f o r ( i = 0 ; i < N; i++)

6

(∗ p t r ) [ i ] = &tmp [ ( i ∗ s i z e o f ( d o u b l e ) ) ∗M] ;

Références

Documents relatifs

Alors il existerait une infinit´e de complexes µ, de la forme q −2k λ, valeurs propres de E ; c’est

C’est une application du th´eor`eme de continuit´e sous le

Rappelons que 2 matrices semblables ont le mˆ eme polynˆ ome caract´ eristique, et que le polynˆ ome caract´ eristique d’une matrice et de sa transpos´ ee sont identiques.. Un

Dans la deuxi` eme, on construit effectivement une suite de polynˆ omes qui converge uniform´ ement vers toute fonction continue.. Le m´ elange entre les parties analyse et les

Commentaires : C’est un sujet tr` es classique, o` u il est question d’´ equations diff´ erentielles, de s´ eries enti` eres, d’int´ egrales d´ ependant d’un param` etre,

I.A.1) Nous prouvons par exemple que si A est triangulaire inf´ erieure inversible, alors A − 1 est elle- mˆ eme triangulaire inf´ erieure. Il suffit alors de prendre la transpos´

Bien sˆ ur les ´ ecritures des deux signataires devront apparaˆ ıtre de mani` ere significative dans la copie. Probl`

[r]