const_seg
pragma
Spécifie la section (segment) dans laquelle les variables const sont stockées dans le fichier objet (.obj).
Syntaxe
#pragma const_seg(
[ « section-name » [,
« section-class » ] ])
#pragma const_seg(
{push
|pop
} [,
identificateur ] [,
« section-name » [,
« section-class » ] ])
Paramètres
push
(Facultatif) Place un enregistrement sur la pile du compilateur interne. A push
peut avoir un identificateur et un nom de section.
pop
(Facultatif) Supprime un enregistrement du haut de la pile du compilateur interne. A pop
peut avoir un identificateur et un nom de section. Vous pouvez afficher plusieurs enregistrements à l’aide d’une pop
seule commande à l’aide de l’identificateur. Le nom de section devient le nom de section const actif après la fenêtre contextuelle.
identifier
(Facultatif) Lorsqu’il est utilisé avec push
, attribue un nom à l’enregistrement sur la pile du compilateur interne. Lorsqu’elle est utilisée avec pop
, la directive affiche les enregistrements de la pile interne jusqu’à ce que l’identificateur soit supprimé. Si l’identificateur n’est pas trouvé sur la pile interne, rien n’est dépilé.
« section-name »
(Facultatif) Nom d’une section. Lorsqu’elle est utilisée avec pop
, la pile est dépilée et le nom de section devient le nom de section const actif.
« section-class »
(Facultatif) Ignoré, mais inclus pour la compatibilité avec les versions de Microsoft C++ antérieures à la version 2.0.
Notes
Une section d’un fichier objet est un bloc nommé de données chargées en mémoire en tant qu’unité. Une section const est une section qui contient des données constantes. Dans cet article, les termes segment et section ont la même signification.
La const_seg
pragma directive indique au compilateur de placer tous les éléments de données constants de l’unité de traduction dans une section const nommée section-name. La section par défaut du fichier objet pour les const
variables est .rdata
. Certaines variables const
, telles que les scalaires, sont automatiquement incluses en ligne dans le flux de code. Le code inline n’apparaît pas dans .rdata
. Une const_seg
pragma directive sans paramètre de nom de section réinitialise le nom de la section pour les éléments .rdata
de données suivants const
sur .
Si vous définissez un objet qui nécessite une initialisation dynamique dans un const_seg
, le résultat n’est pas défini.
Pour obtenir la liste des noms qui ne doivent pas être utilisés pour créer une section, consultez /SECTION
.
Vous pouvez également spécifier des sections pour les données initialisées (data_seg
), les données non initialisées (bss_seg
) et les fonctions (code_seg
).
Vous pouvez utiliser l’application DUMPBIN.EXE pour afficher les fichiers objet. Les versions de DUMPBIN pour chaque architecture cible prise en charge sont incluses avec Visual Studio.
Exemple
// pragma_directive_const_seg.cpp
// compile with: /EHsc
#include <iostream>
const int i = 7; // inlined, not stored in .rdata
const char sz1[]= "test1"; // stored in .rdata
#pragma const_seg(".my_data1")
const char sz2[]= "test2"; // stored in .my_data1
#pragma const_seg(push, stack1, ".my_data2")
const char sz3[]= "test3"; // stored in .my_data2
#pragma const_seg(pop, stack1) // pop stack1 from stack
const char sz4[]= "test4"; // stored in .my_data1
int main() {
using namespace std;
// const data must be referenced to be put in .obj
cout << sz1 << endl;
cout << sz2 << endl;
cout << sz3 << endl;
cout << sz4 << endl;
}
test1
test2
test3
test4