Bagikan melalui


const_seg pragma

Menentukan bagian (segmen) tempat variabel const disimpan dalam file objek (.obj).

Sintaks

#pragma const_seg( [ "section-name" [ , "section-class" ] ] )
#pragma const_seg( { push | pop } [ , pengidentifikasi ] [ , "section-name" [ , "section-class" ] ] )

Parameter

push
(Opsional) Menempatkan rekaman pada tumpukan kompilator internal. Dapat push memiliki pengidentifikasi dan nama bagian.

pop
(Opsional) Menghapus rekaman dari bagian atas tumpukan pengkompilasi internal. Dapat pop memiliki pengidentifikasi dan nama bagian. Anda dapat memunculkan beberapa rekaman hanya menggunakan satu pop perintah dengan menggunakan pengidentifikasi. Nama bagian menjadi nama bagian konstan aktif setelah pop.

identifier
(Opsional) Saat digunakan dengan push, menetapkan nama ke rekaman pada tumpukan kompilator internal. Saat digunakan dengan pop, direktif akan memunculkan rekaman dari tumpukan internal hingga pengidentifikasi dihapus. Jika pengidentifikasi tidak ditemukan di tumpukan internal, tidak ada yang muncul.

"section-name"
(Opsional) Nama bagian. Saat digunakan dengan pop, tumpukan dimunculkan dan nama bagian menjadi nama bagian konstan aktif.

"section-class"
(Opsional) Diabaikan, tetapi disertakan untuk kompatibilitas dengan versi Microsoft C++ yang lebih lama dari versi 2.0.

Keterangan

Bagian dalam file objek adalah blok data bernama yang dimuat ke dalam memori sebagai unit. Bagian const adalah bagian yang berisi data konstanta. Dalam artikel ini, segmen dan bagian istilah memiliki arti yang sama.

Direktif const_segpragma memberi tahu pengkompilasi untuk menempatkan semua item data konstan dari unit terjemahan ke dalam bagian const bernama section-name. Bagian default dalam file objek untuk const variabel adalah .rdata. Beberapa const variabel, seperti skalar, secara otomatis disebarkan ke dalam aliran kode. Kode inlined tidak muncul di .rdata. Direktif const_segpragma tanpa parameter nama bagian mengatur ulang nama bagian untuk item data berikutnya const ke .rdata.

Jika Anda menentukan objek yang memerlukan inisialisasi dinamis dalam const_seg, hasilnya adalah perilaku yang tidak ditentukan.

Untuk daftar nama yang seharusnya tidak digunakan untuk membuat bagian, lihat /SECTION.

Anda juga dapat menentukan bagian untuk data yang diinisialisasi (data_seg), data yang tidak diinisialisasi (bss_seg), dan fungsi (code_seg).

Anda dapat menggunakan aplikasi DUMPBIN.EXE untuk melihat file objek. Versi DUMPBIN untuk setiap arsitektur target yang didukung disertakan dengan Visual Studio.

Contoh

// 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

Lihat juga

Pragmadirektif dan __pragma kata kunci dan _Pragma