9
votes

Struct avec membre du tableau en c

Récemment, j'ai examiné certains Code C et j'ai trouvé quelque chose d'équivalent à ce qui suit:

struct foo {
    int some_innocent_variables;
    double some_big_array[VERY_LARGE_NUMBER];
}


1 commentaires

L'inefficacité dans l'utilisation de l'espace dépend de la question de savoir si vous utilisez ou non l'espace alloué. Si l'ensemble de la matrice est toujours utilisé, un pointeur ajoutera quelques octets d'espace gaspillé pour stocker le pointeur lui-même (même si négligeable pour les grands tableaux).


6 Réponses :


0
votes

Oui, en C, vous passeriez généralement un pointeur à la structure en raison de raisons d'efficacité.


0 commentaires

8
votes

Si vous passez par la valeur Oui, cela fera une copie de tout. Mais c'est pourquoi les pointeurs existent.

//Just the address is passed 
void doSomething(struct foo *myFoo)
{

}


1 commentaires

Pour rester aussi proche de la valeur de passage que possible tout en gagnant l'efficacité de la transmission par référence, vous pouvez utiliser struct FOO CONSTO * CONSTOY MYFOO . Cela indiquera au compilateur de vous avertir lorsque vous essayez accidentellement de modifier le pointeur ou le pointeur à la valeur.



3
votes

Etre transmis comme un argument, il sera copié, ce qui est un moyen très inefficace de passer des structures, en particulier les plus gros. Cependant, fondamentalement, les structures sont transmises à des fonctions par le pointeur.

Choix entre p>

double *some_pointer


0 commentaires

1
votes

Il y a beaucoup de raisons d'utiliser des tableaux dans les structures. Parmi eux, c'est que les structures sont transmises à des fonctions par la valeur, tandis que les tableaux sont transmis par référence. Cela dit, cette structure est probablement transmise à des fonctions avec des pointeurs.


0 commentaires

1
votes

Comme d'autres l'ont dit, les objets de ce type sont généralement passés avec des pointeurs (toujours Tailleof (struct FOO) octets, souvent 4 octets).

Vous pouvez également voir le "STRIT HACK "(Aussi transmis avec des pointeurs): xxx

Ce" structure hack "obtient une matrice dimensionné par le malloc appel. < Pré> xxx


0 commentaires

0
votes

Edit: Cette structure va bien tant que vous le transmettez par référence (à l'aide d'un pointeur).

Offtopic: Méfiez-vous du piratage de la structure, comme il est non strictement conformiste standard ; Il ignore le rembourrage automatique. Les files d'attente de messagerie IPC UNIX l'utilisent (voir struct msgbuf ), cependant, et il est presque certainement de travailler avec n'importe quel compilateur.

Cela dit, les fonctions qui utilisent cette structure peuvent utiliser des pointeurs vers elle au lieu d'utiliser une copie.


0 commentaires