J'ai enquête ont l'effet de __restricting certains pointeurs dans un C++ - code, lors de la compilation via le GCC-compilateur.Est-ce que le compilateur GCC C++ prend en compte les instructions __restrict?
Il se que non seulement l'exécution reste tout à fait le même, mais l'exécutable ne semble pas avoir changé, la taille en octets est exactement le même que précédemment.
Mon GCC version est
gcc version 4.3.2 [gcc-4_3-branch revision 141291] (SUSE Linux)
et bien qu'il accepte cette C++ - l'extension lors de l'analyse, il ne semble pas considérer lors du montage du code. Il y a donc une raison, le compilateur ne sait pas comment utiliser cette information sémantique, ou le traitement de cette information est complètement désactivé.
Le code effectue beaucoup de crissement numéro, il aimerait avoir permis à des fins de test. Pouvez-vous aider?
Sans le code, il est vraiment difficile de dire quoi que ce soit. Il est possible que, avec la façon dont le code est écrit, le mot clé '__restrict' ne vous achète rien. Il y a des cas (deux pointeurs pointant vers des types différents sont supposés ne pointer jamais vers la même mémoire à moins que l'un d'entre eux soit 'char *') dans lequel il est simplement supposé quand même. – Omnifarious
Le mot-clé 'restrict' a un effet très spécifique sur l'assembly généré. Vous devriez utiliser 'objdump' ou' gcc -S' pour regarder l'assemblage qu'il génère pour voir quel est l'effet. La taille de votre exécutable et votre temps d'exécution sont de piètres repères de son effet. – greyfade
La question n'est pas encore de savoir si la connaissance de plusieurs tableaux étant disjoints ne sert à rien pour le compilateur, car les exécutables construits sont complètement les mêmes octets pour les octets. Par conséquent, je suppose que la fonctionnalité est désactivée dans le compilateur lui-même. – shuhalo