作为对可执行文件格式有一个粗略理解的人,我发现MSDN文档中的以下#pragma
指令非常有趣:
将某些变量和函数体放在PE / OBJ文件中的不同.section
中的优势究竟是什么?
答案 0 :(得分:1)
嗯,传统上字面值是常数(例如static const char* const = "hello world";
)部分因为它们位于const_seg
区域,如果它们位于data_seg
或{{bss_seg
1}}它们可能是可变的(虽然由于显而易见的原因而不能就地调整大小)。
另一个原因(同样)可能是在编译时预先初始化复杂的数据结构,但允许在运行时对其进行操作,例如已知值的大型哈希表,尽管这需要编译器 - 支持。
答案 1 :(得分:1)
更改片段主要用于嵌入式软件,以将一些数据映射到各种物理存储区域。例如,您可能希望将某些变量保存在EEPROM中,在这种情况下,您可以在链接时定义要映射到EEPROM地址的特殊段。
对于WIN32可执行文件,它的用途有限。您可能希望使用它在进程的各种实例之间共享一些内存,但如果您试图篡改内存映射,您最好知道自己在做什么。