Partager via


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_segpragma 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_segpragma directive sans paramètre de nom de section réinitialise le nom de la section pour les éléments .rdatade 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

Voir aussi

Directives pragma et les __pragma_Pragma mot clé