为什么要在PE文件中创建不同的代码/数据/ bss部分?

时间:2015-09-11 23:20:02

标签: c++ c pragma portable-executable

作为对可执行文件格式有一个粗略理解的人,我发现MSDN文档中的以下#pragma指令非常有趣:

将某些变量和函数体放在PE / OBJ文件中的不同.section中的优势究竟是什么?

2 个答案:

答案 0 :(得分:1)

嗯,传统上字面值是常数(例如static const char* const = "hello world";)部分因为它们位于const_seg区域,如果它们位于data_seg或{{bss_seg 1}}它们可能是可变的(虽然由于显而易见的原因而不能就地调整大小)。

另一个原因(同样)可能是在编译时预先初始化复杂的数据结构,但允许在运行时对其进行操作,例如已知值的大型哈希表,尽管这需要编译器 - 支持。

答案 1 :(得分:1)

更改片段主要用于嵌入式软件,以将一些数据映射到各种物理存储区域。例如,您可能希望将某些变量保存在EEPROM中,在这种情况下,您可以在链接时定义要映射到EEPROM地址的特殊段。

对于WIN32可执行文件,它的用途有限。您可能希望使用它在进程的各种实例之间共享一些内存,但如果您试图篡改内存映射,您最好知道自己在做什么。