data_seg
pragma
指定对象 (.obj) 文件中用于存储初始化变量的数据节(段)。
语法
#pragma data_seg(
[ "section-name" [,
"section-class" ] ])
#pragma data_seg(
{push
|pop
} [,
标识符 ] [,
“section-name” [,
“section-class” ] ])
参数
push
(可选)将一个记录置于内部编译器堆栈上。
push
可以具有 identifier 和 section-name。
pop
(可选)从内部编译器堆栈的顶部移除记录。
pop
可以具有 identifier 和 section-name。 通过使用 identifier,你只需使用一个 pop
命令即可弹出多条记录。 section-name 在弹出后成为活动数据节名称。
identifier
(可选)当与 push
一起使用时,为内部编译器堆栈上的记录指定名称。 与 pop
一起使用时,会从内部堆栈弹出记录,直到移除 identifier。 如果在内部堆栈上未发现 identifier,则不会弹出任何内容。
利用 identifier,可使多个记录与一个 命令一起弹出pop
。
"section-name"
(可选)分区的名称。 当与 pop
一起使用时,将弹出堆栈,且 section-name 会成为活动数据节名称。
"section-class"
(可选)已忽略,但包含在内以便与 2.0 版之前的 Microsoft C++ 版本兼容。
备注
对象文件中的分区是作为单元加载到内存的已命名数据块。 数据节是包含初始化数据的节。 在本文中,术语“段”和“节”的含义相同。
.obj 文件中用于存储初始化变量的默认节是 .data
。 未初始化的变量被视为初始化为零并且存储在 .bss
中。
data_seg
pragma 指令指示编译器将所有初始化数据项从转换单元放入名为 section-name 的数据节中。 默认情况下,用于对象文件中初始化数据的数据节命名为 .data
。 未初始化的变量被视为初始化为零并且存储在 .bss
中。 没有 section-name 参数的 data_seg
pragma 指令将后续初始化数据项的数据节名称重置为 .data
。
使用 data_seg
分配的数据不保留有关其位置的任何信息。
有关不应用于创建节的名称的列表,请参阅 /SECTION
。
还可以为常量变量 (const_seg
)、初始化的数据 (bss_seg
) 和函数 (code_seg
) 指定节。
可以使用 DUMPBIN.EXE 应用程序查看对象文件。 用于每个支持的目标体系结构的 DUMPBIN 版本随 Visual Studio 一起提供。
示例
// pragma_directive_data_seg.cpp
int h = 1; // stored in .data
int i = 0; // stored in .bss
#pragma data_seg(".my_data1")
int j = 1; // stored in .my_data1
#pragma data_seg(push, stack1, ".my_data2")
int l = 2; // stored in .my_data2
#pragma data_seg(pop, stack1) // pop stack1 off the stack
int m = 3; // stored in .my_data1
int main() {
}