定义VC全局变量在节中位置

在同一cpp文件中定义的初始化的简单全局变量,如

ULONG g_SpinLock = 0;

BYTE g_Str[] = {0,1,2,3,4};

将按照定义顺序出现在.data节中,一般来说.data节的起始位置是由这些变量占据的。但是在不同cpp文件中定义的变量在节中出现的位置让人难以掌控。

一个不太爽的解决方案就是将想要控制顺序的几个变量放到新节中,即首先用

#pragma section("mysec",read,write)定义新节,再用__declspec(allocate("mysec"))将变量分配到新节中。
最近发现节名字可以这样写#pragma section(".data$a") ,这里节名字中$符号之前部分为节名字,之后部分决定先后顺寻。然后__declspec(allocate(".data$a")) 分配的变量就可以比较靠后了,用这个办法可以让某个变量上升到.data节起始位置。

而对于全局对象,由于需要调用构造函数,更复杂一点。可以参考#pragma init_seg使特定的全局变量优先于其他的全局变量先构造,MSDN init_seg

你可能感兴趣的:(杂项)