const_seg
指定 .obj 檔案中儲存 const 變數的區段。
#pragma const_seg ( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] )
備註
在本主題中,「區段」(Segment) 和「區段」(Section) 這兩個詞的意義可互換。
OBJ 檔案可以使用 dumpbin 應用程式檢視。 .obj 檔案中 const 變數的預設區段是 .rdata。 某些 const 變數 (例如純量) 會自動內嵌於程式碼資料流中。 內嵌的程式碼不會出現在 .rdata 中。
定義必須在 const_seg 中進行動態初始化的物件時,會產生未定義的行為。
未包含參數的 #pragma const_seg 會將區段重設為 .rdata。
push (選擇性)
將記錄放置到內部編譯器堆疊上。 push 可以具有 identifier 和 segment-name。pop (選擇性)
會從內部編譯器堆疊頂端移除記錄。identifier (選擇性)
搭配 push 使用時,會指派名稱給內部編譯器堆疊的記錄。 搭配 pop 使用時,會將記錄推出內部堆疊,直到移除 identifier 為止;如果在內部堆疊找不到 identifier,則不會快顯任何項目。identifier 可讓您使用一個 pop 命令即可推出多筆記錄。
"segment-name" (選擇性)
區段的名稱。 搭配 pop 使用時會推出堆疊,segment-name 會變成作用中區段名稱。"segment-class" (選擇性)
包含這個項目可提供與 C++ 2.0 以前版本的相容性。 會忽略此項。
範例
// 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;
}
註解
如需建立區段時不應該使用的名稱清單,請參閱 /SECTION。
您也可以為初始化的資料 (data_seg)、未初始化的資料 (bss_seg) 及函式 (code_seg) 指定區段。