const_seg
pragma
指定 const 變數儲存在物件 (.obj) 檔案中的區段 (segment)。
語法
#pragma const_seg(
[ 「 section-name 」 [,
「 section-class 」 ] ])
#pragma const_seg(
{push
|pop
} [,
identifier ] [,
「 section-name 」 [,
「 section-class 」 ] ])
參數
push
(選擇性)將記錄放在內部編譯器堆疊上。 push
可以有 識別碼 和 區段名稱 。
pop
(選擇性)從內部編譯器堆疊頂端移除記錄。 pop
可以有 識別碼 和 區段名稱 。 您可以使用識別碼,只使用一個 pop
命令 來快顯多個記錄。 區 段名稱 會在快顯之後變成使用中的 const 區段名稱。
identifier
(選擇性)搭配 push
使用 時,會將名稱指派給內部編譯器堆疊上的記錄。 搭配 pop
使用 時,指示詞會從內部堆疊取出記錄,直到 移除識別碼 為止。 如果在 內部堆疊上找不到識別碼,則不會彈出任何識別碼 。
「 section-name 」
(選擇性)區段的名稱。 搭配 pop
使用 時,會彈出堆疊,而 section-name 會變成使用中的 const 區段名稱。
「 section-class 」
(選擇性)忽略,但包含與 2.0 版舊版 Microsoft C++ 的相容性。
備註
物件檔中的區段 是載入記憶體作為單位的資料具名區塊。 const 區段是包含常數資料的區段 。 在本文中,字詞 區段 和 區段 的意義相同。
指示 const_seg
pragma 詞會指示編譯器將所有常數資料項目從轉譯單位放入名為 section-name 的 const 區段。 變數物件檔 const
中的預設區段為 .rdata
。 某些 const
變數 (例如純量) 會自動內嵌於程式碼資料流中。 內嵌程式碼不會出現在 中 .rdata
。 const_seg
pragma 沒有 section-name 參數的指示詞會將後續 const
資料項目 .rdata
的區段名稱重設為 。
如果您在 中 const_seg
定義需要動態初始化的物件,則結果為未定義的行為。
如需不應該用來建立區段的名稱清單,請參閱 /SECTION
。
您也可以指定初始化資料 ( data_seg
)、未初始化的資料 () 和函式 ( bss_seg
code_seg
) 的區段。
您可以使用 DUMPBIN.EXE 應用程式來檢視物件檔案。 每個支援的目標架構的 DUMPBIN 版本都會隨附于 Visual Studio 中。
範例
// 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
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應