IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

La spécification du C++17 n'intègrera pas les concepts


Sujet :

C++

  1. #61
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 4 756
    Points : 11 346
    Points
    11 346
    Par défaut
    Merci @Pyramidev pour cette remarque sur les VLAs.

    "alloca" devrait faire aussi bien, non ?
    http://man7.org/linux/man-pages/man3/alloca.3.html

    Si c'est le cas, on a donc les VLA comme syntaxical sugar du C99.

    (parmi celui que j'ai donné provenant de chez Intel)
    Quelles optimisations possibles en C ne l'est pas en C++ ?

    On en revient toujours au même, comment pouvez-vous taxer le C++ comme un gouffre de performance quand tout ce qui est possible en C l'ai aussi en C++ ?

    Premièrement c'est faux, la libc =/= libc++ =/= libstdc++
    Ça c'est sous le pingouin, pas chez le papillon. Et encore, je suis pas un spécialiste de la banquise mais d'autres pourront vous donnez bien des moyen pour faire des choses sans même aucune de ces librairies (comme en C d'ailleur).

    un C++ enthusiast comme toi devrait le saluer.
    Un développeur système sait que les API d'OS sont majoritairement des API C qui oblige à maitriser le C++, donc le malloc, qui fait partie du C++ aussi bien que du C.

    Je ne dis pas que le C++ est l'Alpha et l’Oméga des langages, mais le C n'a pas un pouvoir magique non plus.

    Si le new ne fait plus rentrer les performances dans les clous, un simple #define pour utiliser une mécanique adaptée, comme un malloc, mais quitte à faire de l'optimisation on va se laisser pousser la barbe et faire un truc aux petits ognons avec le temps gagné lors de la conception/implémentation du reste du projet.

    Le C n'est pas magique, et j'ai l'impression de voir beaucoup de charlatans.

  2. #62
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 828
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 828
    Points : 31 299
    Points
    31 299
    Billets dans le blog
    4
    Par défaut
    malloc est tellement différent de new qu'il peut être utilisé pour le surcharger et qu'il est utilisé en interne dans certaines implémentations
    http://en.cppreference.com/w/cpp/mem...w/operator_new
    http://stackoverflow.com/questions/2...oc-free#240308
    En fait la seule différence c'est vraiment l'appel au constructeur de la part de new après l'allocation. Donc si t'as des constructeurs triviaux/POD (ce qui est le cas en C où tu ne peux pas avoir autre chose), ça change strictement rien. Si t'as un constructeur non trivial, ben tu le payes.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #63
    Membre averti Avatar de RPGamer
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    mars 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués

    Informations forums :
    Inscription : mars 2010
    Messages : 168
    Points : 391
    Points
    391
    Par défaut
    Quelles optimisations possibles en C ne l'est pas en C++ ?
    Pourquoi est-ce que je devrais encore perdre mon temps à répondre à des gens qui ne prennent même pas la peine de lire les liens qu'on leur donnent? L'article montre qu'on peut réaliser des optimisations en analyser le code machine généré et en l'améliorant. A aucun moment il n'est question de C ou de C++.

    En fait la seule différence c'est vraiment l'appel au constructeur de la part de new après l'allocation.
    C'est une bonne raison pour préférer new (avec l'exception behavior).

  4. #64
    Expert confirmé
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    avril 2016
    Messages
    1 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : avril 2016
    Messages : 1 248
    Points : 5 219
    Points
    5 219
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Moi, la seule chose qui n'est pas possible en C++ (officiellement en plus) mais en possible en C, c'est le VLA.
    Et on est d'accord que le VLA, c'est juste du syntaxical sugar et que cela ne change rien aux "performances", non ?
    Citation Envoyé par bacelar Voir le message
    "alloca" devrait faire aussi bien, non ?
    http://man7.org/linux/man-pages/man3/alloca.3.html

    Si c'est le cas, on a donc les VLA comme syntaxical sugar du C99.
    En C, par rapport à alloca(), oui, les VLA sont du sucre syntaxique.
    Mais alloca() n'est standard ni en C, ni en C++, contrairement aux VLA qui sont standards en C99 (mais pas en C++).

  5. #65
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    VLA qui sont standards en C99 (mais pas en C++).
    Les VLA sont biens dans la norme de C99 mais ils sont optionnels en C11.

  6. #66
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : juin 2002
    Messages : 2 165
    Points : 4 605
    Points
    4 605
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Les VLA sont biens dans la norme de C99 mais ils sont optionnels.
    Pour être précis, ils sont devenus optionnels en C11, mais en C99 leur support n'était pas optionnel (même si tout le monde ne les a pas implémentés, d'où le passage en optionnel).

  7. #67
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Merci pour l'info, j'édite mon message.

  8. #68
    Membre extrêmement actif
    Homme Profil pro
    Consultant Ingenierie mécanique
    Inscrit en
    mars 2006
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant Ingenierie mécanique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2006
    Messages : 1 274
    Points : 2 951
    Points
    2 951
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Mué enfin, je connais personne de sensé qui n'essaye pas de limiter un peu chacun de ces aspects. Même si "on s'en moque" du cpu ou de la ram, on va pas s'éclater à en utiliser plus que nécessaire.


    Et t'as une quelconque étude, article ou quoi qui prouve que c'est bien/mieux ?
    Par exemple, coder en assembleur certaines parties, à part pour montrer qu'on connait l'assembleur et qu'on fait du code non/dificilement portable, y'a un intérêt pour les perfs ? Parce que bon on est en 2016 et les compilos sont désormais bien puissants hein.
    De même, allouer la mémoire en C ? Parce que tu crois vraiment qu'un malloc fera mieux qu'un new ? Et quoi de mieux au juste ?
    Par exemple fait un comparatif. utilise opencv avec et sans la librairie de primitive intel ( ou toutes les op matricielles sont codé en asm) tu verras la différence, c'est flagrant, comme d'un coup on un meilleur fps qui permet de faire de la reconnaissance poussé en temps reel.

  9. #69
    Membre extrêmement actif
    Homme Profil pro
    Consultant Ingenierie mécanique
    Inscrit en
    mars 2006
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant Ingenierie mécanique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2006
    Messages : 1 274
    Points : 2 951
    Points
    2 951
    Par défaut
    j'ai jamais parlé d'appeler des fonctions c comme malloc en c++, je dis juste que j'ai des source en c qui sont compilé en c pour des structure de donnée ou des algorithme particulier et prévu pour être le plus performant possible en logique et en implémentation, et qui sont donc compilé via le compilateur c et intégrés dans un prog qui est écrit globalement en c++.

    Ceci étant si c'est utile pour la mémoire ou le cpu, certaine méthode qui reviennent souvent selon ce que le profileur me dira sont codés en asm.

    On sera toujours meilleur que le compilateur sur un besoin précis. le compilateur assemble des pattern asm pour des fonction c++, c'est de la compilation générique un peu, alors que nous on peut aller a l'essentiel de notre besoin en minimisant les call et les jump et les registers uses.

    évidemment quand on code en asm, il faut avoir en tète les plateformes et leur spécificités.

    j'en ai pas parlé parce que ça me semblait évident.

  10. #70
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    octobre 2004
    Messages
    11 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : octobre 2004
    Messages : 11 511
    Points : 29 908
    Points
    29 908
    Par défaut
    Salut,
    Citation Envoyé par Aiekick Voir le message
    On sera toujours meilleur que le compilateur sur un besoin précis. le compilateur assemble des pattern asm pour des fonction c++, c'est de la compilation générique un peu, alors que nous on peut aller a l'essentiel de notre besoin en minimisant les call et les jump et les registers uses.
    Ca, ca reste encore à voir...

    Les compilateurs disposent d'heuristiques de plus en plus précises pour les optimisations à effectuer. Qu'il s'agisse d'optimiser la taille de l'exécutable ou la vitesse (ou de trouver le meilleur "juste milieu").

    Je ne dis pas que nous ne pourrons surement pas trouver certaines optimisations, à des points très particuliers, que les compilateurs auront peut être évitées (parce que les heuristiques étaient peut être justement "antagonistes" sur ce point particulier), mais je dis que, s'il en reste effectivement (et, à titre personnel, je serais sans doute bien en peine de trouver ces points particuliers), le gain réellement observé a de très fortes chances d'être purement anecdotique.

    D'abord parce que nous en arrivons réellement à des micro optimisations, ensuite qu'il ne suffit pas forcément de se dire "je vais remplacer telle instruction par telle autre : l'une prend X cycles et l'autre en prend Y de moins". En effet, il n'est pas impossible que les Y "cycles de plus" soient très largement amortis par un "truc" ou un autre qui survient quelques instructions plus tôt (ou plus tard) et qui rend impossible l'utilisation de l'instruction "de remplacement".

    Ceci dit, je te comprends : il est toujours utile de gagner quelques cycles d'horloge "partout où c'est possible"... Mais si c'est pour ne les gagner qu'une fois "de temps en temps", il est très largement préférable de s'intéresser à des points clairement identifiés comme susceptibles de poser problème.

    Et, de toutes manières, avant d'en arriver à accepter ces micro optimisations (et, de manière générale, avant d'accepter d'avoir de l'asm inliné dans mon code, qu'il soit C ou C++), je crois sincèrement que je préférerai m'assurer que mes algorithmes soient, effectivement, les plus corrects possibles. Et, dans les cas les plus douteux, je commencerai sans doute par essayer de limiter les caches misses
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #71
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 828
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 828
    Points : 31 299
    Points
    31 299
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. [Debutant(e)]Eclipse ne voit pas les sources
    Par uliss dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 04/08/2004, 10h34
  2. probleme avec requete sql aime pas les strings
    Par lil_jam63 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/02/2004, 15h45
  3. TASM ne connaît pas les registres FS et GS
    Par forthx dans le forum Assembleur
    Réponses: 4
    Dernier message: 07/06/2003, 01h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo