Maison > développement back-end > C++ > 'memcpy' est-il un moyen valable de construire des objets trivialement copiables en C ?

'memcpy' est-il un moyen valable de construire des objets trivialement copiables en C ?

Patricia Arquette
Libérer: 2024-11-09 17:39:02
original
971 Les gens l'ont consulté

Is

Préoccupations lors de l'utilisation de "memcpy" pour construire des objets trivialement copiables

En C, la validité de l'utilisation de "memcpy" pour construire des objets de manière triviale les types copiables ont fait l’objet de débats. Cet article explore les nuances et les incertitudes entourant ce code :

#include <cstdlib>
#include <cstring>

struct T   // trivially copyable type
{
    int x, y;
};

int main()
{
    void *buf = std::malloc( sizeof(T) );
    if ( !buf ) return 0;

    T a{};
    std::memcpy(buf, &amp;a, sizeof a);
    T *b = static_cast<T *>(buf);

    b->x = b->y;

    free(buf);
}
Copier après la connexion

Durée de vie incertaine des objets avec "memcpy""

Le nœud de la question réside dans la détermination si " *b" représente un objet dont la durée de vie a été initiée et, si c'est le cas, quand cette durée de vie commence. Le standard C reste silencieux sur cette question.

Proposition de création implicite d'objet et état actuel

Pour lever cette ambiguïté, la proposition p0593 a été avancée, préconisant la création implicite d'objets lors d'opérations de manipulation d'objets de bas niveau telles que "malloc" et "memcpy". Ce changement proposé fournirait un comportement défini pour de tels scénarios. Cependant, cette proposition n'a pas encore été officiellement examinée.

Directives du projet de norme C 14

Conformément au projet de norme C 14, section 1.8 [intro.object] , les objets sont principalement créés via des définitions, de nouvelles expressions ou certains processus d'implémentation. La section 3.9 [basic.types] relative aux types trivialement copiables spécifie que la copie des octets de ces objets est autorisée, à condition que les valeurs soient restaurées de manière appropriée.

Discussion en cours et approches alternatives

La « liste de diffusion ub » a facilité une discussion animée sur ce sujet, en se concentrant sur la nécessité d'éviter la copie via le jeu de mots.

Conclusion

La question de la "construction" d'objets trivialement copiables avec "memcpy" reste non résolue au sein du standard C, laissant place à un comportement potentiel indéfini. Les discussions et propositions en cours, telles que p0593, visent à clarifier et à résoudre ce problème, apportant une plus grande certitude à la manipulation d'objets de bas niveau en C .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal