Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Affectation automatique ou memcpy ?

3 réponses
Avatar
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 ;-)

3 réponses

Avatar
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 ;-)
Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "Sylvère" wrote:

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/

Avatar
Olivier Saladin
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