Citation:
Envoy� par
moldavi
Bonjour.
Je vais essayer d''�tre plus pr�cis dans les choses, il est vrai que j'ai l'impression d'�tre dans un dialogue de sourds.
Il y a effectivement un probleme entre ce que tu dis et ce que tu montres, d'ou un quiproquo du a une mauvaise interpretation, j'y reviens.
Citation:
On utilise l'alignement de donn�es afin de garantir que les donn�es sont contig�es, sans bourrage. On aligne donc des donn�es qu'une fonction assembleur pourra utiliser (c'est un exemple). S'il y a du bourrage, la fonction assembleur ne fonctionnera pas.
Je ne suis pas sur de comprendre ce que tu veux dire la, essentielement parcequ'on parle ici des types, pas des fonctions, a ce que je sache. J'y reviens.
Citation:
Quand j'ai fait l'erreur de dire qu'on ne peut pas aligner une classe, c'�tait dans le sens o� une classe qui contient des fonctions, on ne peut pas aligner ce qu'il y a � l'int�rieur des fonctions. On peut aligner le pointeur de la fonction, mais pas ses param�tres et pas le code de la fonction.
http://msdn.microsoft.com/en-us/library/83ythb65.aspx
Citation:
You cannot specify alignment for function parameters.
Donc quand au d�part j'ai dis cela, c'�tait avec cette id�e l�. D'ailleurs quel serait l'int�r�t par exemple, de passer le code align�e d'une fonction � une fonction assembleur.
La ligne que tu viens de citer dis que tu ne peux specifier l'alignement des paramettres de fonctions. Ce qui est evident. Et n'a rien a voir avec ce qu'on dis ici (a priori). Ici on parle du fait qu'on puisse preciser l'alignement de types. Les types ne sont pas des instances de type. Les paramettres de fonctions sont des instances de type. Tu peux utilises tes types en paramettres de fonction qu'ils soient ou pas alignes. Ce que tu ne peux pas faire, c'est preciser l'alignement que tu veux au niveau de la signature de fonction. Sous entendu: si tu precises un alignement pour un type, ca dois etre le meme pour toutes les instances de ce type.
Autrement dis, tu parles de quelque chose qui ne marche pas (peut etre que tu ne comprends pas bien le modele de memoire en C++?), mais nous on parle d'autre chose qui marche , a savoir que tu peux preciser l'alignement (quel que soit le compilo, ca depends de la syntaxe fournies ou si ils fournissent alignas() ) d'un type, cela incluant enum, union, class et struct et qu'il n'y a pas de difference du point de vue du compilateur, vu que ce n'est "que" de l'agencement en memoire, ce n'est pas lie a la semantique (ca n'a rien a voir avec la difference entre une class, une struct, une enum ou une union).
Citation:
Et pour ceux qui vont me dire que c'est sp�cifique � Visual Studio, et bien faites-nous part de ce qu'il en est sous Linux ou Mac. On apprendra des choses au moins.
Evidemment!
Si tu nous montre le code que tu as teste, je suis certain qu'il n'est pas conforme, d'ou l'erreur.
Citation:
Un point c'est tout...
Le probl�me c'est que l'alignement de donn�es n'a rien � voir avec la norme du langage. La norme ne d�finit rien sur l'alignement, une personne l'a pr�cis� dans les messages pr�c�dents (on va lui faire confiance).
Citation:
Vous m'opposer la norme, mais la norme n'a rien � voir dans l'alignment.
La norme fournis de quoi faire de l'alignment de maniere cross-platform depuis C++11. Oui c'est nouveau. Gcc4.8 l'implement apparament, je pense que VS2012 aussi mais c'est a verifier.
Regarde la http://en.cppreference.com/w/cpp/language/alignas
puis les liens en bas, ya d'autres trucs.
Citation:
The alignas specifier may be applied to the declaration of a variable or a class data member, or it can be applied to the definition of a class/struct/union or enum.
C'est la norme et les compilateurs la suivent, donc si tu penses qu'une pratique ne marche pas sur des compilateurs mais est bien specifiee par la norme, c'est un "bug" du compilateur (ou une feature controversee mais c'est tres rare).
Citation:
Le probl�me c'est que je n'en trouve pas.
Pour l'alignement de structure, tu as d�j� le lien que j'ai fourni, il y a ffmpeg, libavcodec, openframeworks. C'es tr�s facile d'en trouver.
Citation:
Quand vous m'aurez fourni suffisamment de lien sur des codes qui utilisent de l'alignement de classe, je r�viserai mon jugement, et je ferai mon mea culpa.
Effectivement les moteurs de recherche de github et autres hosting de code sont vraiment tout pourris.
En plus comme je dis dans la suite, alignas() est recent donc tu en trouves tres peux (dans le code de clang aparamment). Du coup tu dois chercher avec les instructions specifiques aux compilateurs.
Par exemple, si tu cherches avec la syntaxe de gcc pour l'alignement sur 4 bytes, tu vas trouver, parmis un million de bouts de code sur github seulement, ce bout de code qui aligne bien des class et des struct: https://github.com/SRabbelier/Netbea...igned_class.cc
C'est apparament une partie de NetBeans. C'est pas comme si NetBeans etait pas utilise.
La recherche que j'ai fait: https://github.com/search?q=class+__...ults&type=Code
Il n'y a pas ENORMEMENT de code qui aligne des class (par contre yen a pas mal sur les membres de class et les v-table ;) ) mais uniquement par convention. Ca n'a rien a voir avec du code correct et ca n'a rien de bien ou de mal. C'est une habitude, comme souligne precedemment, issue du C.
Je suis sur que tu peux trouver plus d'exemple en cherchant avec les differentes syntaxes des differents compilateurs.
Bref, tout ca pour dire que soit:
- ya un truc que tu sais pas qui te fais penser que C++ marche d'une facon alors que c'est pas le cas, d'ou une sorte de quiproquo;
- on comprends pas ce que tu veux dire, ou tu dis un truc qui n'a pas de sens (la page que tu pointes est eloquente);
Donc probleme de comprehension quelque part. :aie: