Affectation automatique ou memcpy ?

Le
Sylvère
Salut,

tout d'abord j'aimerais être rassuré : Ces 2 ligne de code (1) et (2)
font bien la meme chose ?

maStructure *structure;
void* buffer;

(1) memcpy (structure,buffer,sizeof(maStructure);
(2) structure=*((maStructure*)buffer);



si s'est bien le cas voici ma question , qu'est-ce que vous utilisez
d'habitude ?
J'ai regardé le code assembleur généré et ca donne:
-Evidemment un appelle de fonction pour (1)
-Alors que pour (2) le compilateur génère directement le code pour la copie
( ça aussi je m'y attendais)

Bon , la question c'est quand même laquel de ces formes choisir , une des
formes est déconseillée ou ca depend du contexte ?

Sylvère , qui se pose peut etre trop de questions parfois ;-)
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sylvère
Le #583107
Salut,

tout d'abord j'aimerais être rassuré : Ces 2 ligne de code (1) et (2)
font bien la meme chose ?

maStructure *structure;
void* buffer;

(1) memcpy (structure,buffer,sizeof(maStructure));
(2) *structure=*((maStructure*)buffer);



si s'est bien le cas voici ma question , qu'est-ce que vous utilisez
d'habitude ?
J'ai regardé le code assembleur généré et ca donne:
-Evidemment un appelle de fonction pour (1)
-Alors que pour (2) le compilateur génère directement le code pour la copie
( ça aussi je m'y attendais)

Bon , la question c'est quand même laquel de ces formes choisir , une des
formes est déconseillée ou ca depend du contexte ?

Sylvère , qui se pose peut etre trop de questions parfois ;-)
Emmanuel Delahaye
Le #583099
In 'fr.comp.lang.c', "Sylvère"
tout d'abord j'aimerais être rassuré : Ces 2 ligne de code (1) et (2)
font bien la meme chose ?

maStructure *structure;
void* buffer;

(1) memcpy (structure,buffer,sizeof(maStructure);
(2) structure=*((maStructure*)buffer);


Oui

si s'est bien le cas voici ma question , qu'est-ce que vous utilisez
d'habitude ?


2

J'ai regardé le code assembleur généré et ca donne:
-Evidemment un appelle de fonction pour (1)


Pas forcément. Ca dépend de l'implémentation.

-Alors que pour (2) le compilateur génère directement le code pour la copie
( ça aussi je m'y attendais)


Pas forcément. Ca dépend de l'implémentation.

Bon , la question c'est quand même laquel de ces formes choisir , une des
formes est déconseillée ou ca depend du contexte ?


La plus simple (2). Mais la forme 1 n'est pas déconseillée. Elle est
simplement inutile, vue que la 2 existe.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?lib=cpp
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Olivier Saladin
Le #582854
maStructure *structure;
void* buffer;

(1) memcpy (structure,buffer,sizeof(maStructure);
(2) structure=*((maStructure*)buffer);

Attention à la première solution, si le pointeur (structure) n'est pas

initialisé vers une variable de type structure existante et donc réservée en
mémoire, le memcpy risque de faire n'importe quoi, en copiant vers une
adresse mémoire aléatoire.


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.613 / Virus Database: 392 - Release Date: 04/03/2004

Publicité
Poster une réponse
Anonyme