Parce que les adresses d'espace sont plus efficaces que les pointeurs d’espace, le traducteur optimisant remplace les seconds par les premières chaque fois qu'il peut le faire sans danger.
Utilisation des adresses d’espace en toute sécurité
Ces occasions se présentent souvent dans un corps de procédure. Par exemple, le traducteur peut déterminer facilement qu’une procédure accède en toute sécurité à ses propres variables locales. La difficulté surgit quand des pointeurs d’espace sont passés d’une procédure à une autre. Le plus souvent, une procédure peut être appelée pratiquement de n’importe où, et donc il est difficile de prouver quoi que ce soit à propos d’un pointeur généré par l’appelant d’une procédure.
Le traducteur peut en savoir plus sur ces arguments de procédure, par deux méthodes. L’une consiste à demander au programmeur des renseignements complémentaires sur la façon dont la procédure est appelée. L’autre, à analyser des programmes entiers et des programmes de service, pour obtenir les mêmes informations. Nous appellerons ces deux méthodes #pragma argopt et ARGOPT(*YES), respectivement.
La méthode #pragma argopt est réservée aux langages ILE C ou C++. Ils supportent la structure #pragma, qui permet de les utiliser de manière spécifique pour fournir des indices au compilateur. IBM offre la structure #pragma argopt à l’appui de l’optimisation d’arguments.
#pragma argopt est simple à utiliser. Supposons une procédure nommée foo() qui reçoit des pointeurs d’espace comme arguments ou qui renvoie des pointeurs d’espace au terme de l’opération. Vous pouvez ajouter la ligne suivante juste avant la définition de la procédure :
#pragma argopt foo
Vous devez ajouter la même ligne avant toute instruction qui appelle la procédure foo() en un point quelconque du programme (dans le même module ou dans un autre). Cela ordonne au traducteur de passer des adresses d’espace dans les appelants et de s’attendre à des adresses d’espace dans foo().
(((IMG7159)))
Figure 1.
La figure 1 ci-dessus montre une application constituée de deux modules nommés M et N. Le module M contient une procédure S qui s’attend à un paramètre pointeur d’espace et renvoie un résultat pointeur d’espace. Le module N contient une procédure P qui appelle S. L’exemple montre le placement des directives #pragma argopt pour s’assurer que les adresses d’espace sont passés, pas les pointeurs d’espace.
En tant que programmeur, vous donnez au traducteur des informations qu’il ne peut pas trouver lui-même. Tout simplement, vous dites : “Ces emplacements sont les seuls dans lesquels foo() est appelé, donc on peut s’attendre à des adresses d’espace.” Le traducteur peut ensuite vérifier à chaque site d’appel que l’argument passé est un pointeur d’espace valide. Puis le traducteur peut convertir le pointeur d’espace en une adresse d’espace.
Mais supposons que vous commettiez une erreur. Que se passe-t-il si vous n’identifiez pas correctement tous les appelants de foo() ? Dans ce cas, un appelant passerait un pointeur d’espace, bien que foo() s’attende à une adresse d’espace. Il en résulte une disparité.
Heureusement, ce n’est pas un problème. En cas d’incohérence dans un même module, le traducteur marque cela comme une erreur. S’il y a incohérence entre des modules, vous la découvrirez quand vous essaierez de lier les modules dans un programme ou dans un programme de service. Dans les deux cas, un message d’erreur vous demandera d’effectuer une correction.
#pragma argopt présente deux inconvénients. Premièrement, on l’a vu, cette option est réservée aux programmeurs C et C++. Deuxièmement, le code source doit être modifié pour tirer profit de l’optimisation d’arguments. Mais elle présente aussi des avantages. Vous pouvez utiliser #pragma sur des appels de procédures indirects (des appels passant par un pointeur de procédure). De plus, argopt est présente sur toutes les releases IBM i prises en charge. Vous verrez que ARGOPT(*YES) ne bénéficie pas de ces avantages.
Téléchargez cette ressource
Sécuriser Microsoft 365 avec une approche Zero-Trust
Découvrez comment renforcer la cyber-résilience de Microsoft 365 grâce à une approche Zero-Trust, une administration granulaire et une automatisation avancée. La technologie Virtual Tenant de CoreView permet de sécuriser et simplifier la gestion des environnements complexes, tout en complétant vos stratégies IAM, y compris dans les secteurs réglementés.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Le Zero Trust : pourquoi votre entreprise en a besoin
- Cloud souverain : répondre aux enjeux d’hybridation et de maîtrise des dépendances
- Cybermenaces 2026 : l’IA devient la nouvelle arme des attaquants
- DevX Summit EMEA : les développeurs au cœur de la révolution de l’IA
Articles les + lus
Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
DevX Summit EMEA : les développeurs au cœur de la révolution de l’IA
Adapter la sécurité OT aux réalités de l’industrie
Coder vite, mais coder juste : trouver l’équilibre à l’ère de l’IA
Mixité dans la Tech : en 2026, un choix de souveraineté stratégique
À la une de la chaîne Tech
- Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
- DevX Summit EMEA : les développeurs au cœur de la révolution de l’IA
- Adapter la sécurité OT aux réalités de l’industrie
- Coder vite, mais coder juste : trouver l’équilibre à l’ère de l’IA
- Mixité dans la Tech : en 2026, un choix de souveraineté stratégique
