Je me demandais, est-ce que le compilateur Intel C++ a des vérifications de limites disponibles? Je travaille avec des tonnes de code évoluant depuis dix ans maintenant, et dans un besoin désespéré de débogage et de refactoring. J'ai besoin d'aide.Le compilateur Intel C++ a-t-il des vérifications de limites?
4
A
Répondre
2
Les réseaux sont fondamentalement cassés de cette façon, vous ne pouvez pas les vérifier de manière fiable. Ni le compilateur. Cependant, le compilateur C++ d'Intel peut certainement compiler la classe vectorielle. Activez le débogage de l'itérateur, utilisez l'accesseur at().
1
Si vous travaillez sous Linux ou OS X, valgrind peut vous aider à trouver des erreurs liées à l'accès à la mémoire. Ce n'est pas compatible avec C++, donc faire correspondre sa sortie avec votre code peut prendre un peu de travail.
3
Le compilateur Intel possède plusieurs options de vérification des limites. Par exemple. Check-pointers, Qcheck-pointers Détermine si le compilateur vérifie les bornes d'accès à la mémoire via des pointeurs.
Questions connexes
- 1. Compilateur Intel C++ pour Windows CE
- 2. Comment obtenir des autotools à compiler avec le compilateur Intel?
- 3. Le compilateur Intel C++ dispose-t-il d'un compilateur de ressources?
- 4. Compilateur Intel et Python/ctypes/libffi
- 5. Le compilateur Intel Fortran "-parallel" ne fonctionne pas
- 6. compilateur intel sur vista: "incapable de obtenu la mémoire mappée"
- 7. cmake - Comment définir différentes variables pour le compilateur Intel
- 8. Comment définir le compilateur Microsoft natif pour VS 2003 si le compilateur Intel est le compilateur par défaut?
- 9. Comment puis-je désinstaller le compilateur Intel C++ (ICC) 11 sur Vista x64?
- 10. Où le compilateur Intel C++ stocke-t-il le vptr (pointeur sur la table de fonction virtuelle) dans un objet?
- 11. CMake: comment ajouter des drapeaux de compilateur au compilateur non-par défaut
- 12. limites Désactiver la vérification des C++ vecteurs
- 13. C# Vérifications nuls imbriquées dans les instructions if
- 14. Résultat incorrect avec le compilateur Intel Fortran sur Mac, mais sous Linux
- 15. C++ Expression constante et limites de tableau
- 16. arithmétique de pointeur et le compilateur C#
- 17. problème de remplissage des limites
- 18. erreurs de compilateur C++
- 19. Que signifie le graphe C++ dans Intel Concurrent Collections?
- 20. Configuration de mex pour utiliser le compilateur Visual Studio 2010
- 21. Comment désactiver la remarque "LOOP WAS VECTORIZED" écrite par le compilateur Intel?
- 22. Optimisation d'assembleur Intel
- 23. Intel C Compiler et L "" préfixe
- 24. Vérification des limites des tableaux d'exécution en C++ avec g ++
- 25. Liste des bogues connus dans le compilateur C#
- 26. Optimisation du compilateur C++ des arguments passés
- 27. Comment invoquer le compilateur C++ par programme?
- 28. C Objets Runtime, limites dll
- 29. Où télécharger le compilateur GNU C++
- 30. Indicateurs de compilateur Objective-C
Il est inexact de dire que vous ne pouvez pas vérifier de manière fiable des bornes des tableaux C. Si vous souhaitez vous limiter au code C portable conforme aux normes, il n'est pas défini pour accéder au-delà de la fin d'un tableau, de sorte qu'un compilateur ou un environnement d'exécution peut signaler des erreurs. Vous devez autoriser les pointeurs à avoir des valeurs telles que array [-1] ou array [size] (un élément après l'une ou l'autre fin), mais vous pouvez intercepter les déréférencer. –
Les pointeurs Qcheck du compilateur C d'Intel le font. Il y a même un support matériel, Intel MPX (Memory Protection eXtensions) qui est censé rendre cette exécution plus rapide. (Je dis "supposé" parce qu'Intel a cassé mon design original pour ce qui est devenu MPX, ce qui fait qu'il est souvent plus lent que de ne pas utiliser les instructions MPX, je ne peux qu'espérer que cela sera corrigé dans le futur.) –
la vérification de C est que, chaque fois que vous prenez l'adresse d'un objet, vous associez des bornes à cette adresse. Le pointeur d'Intel contrôlant le compilateur et le magasin MPX qui se lient dans des registres spéciaux à l'intérieur du CPU et dans une structure de données spéciale "non adjacente" essentiellement accessible par une recherche de hachage de l'adresse du pointeur en mémoire. J'ai appelé ces gros-pointeurs non adjacents.) Il est complètement compatible avec le code C portable, exécutant toutes les suites de tests de validation. Il a même trouvé des bugs dans les benchmarks SPEC dont nous n'étions pas conscients. –