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_seg
pragma 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_seg
pragma 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