exe中的静态变量进入进程的数据段,并在进程启动时初始化。
因此,如果我的进程动态加载一个库,其中包含使用dlopen或其他方法的静态变量,则这些静态变量将映射到哪个段。还有什么时候会初始化这些静态变量呢?
我的理解是,进程中的数据段是固定的,不能像堆栈或堆那样增长。我说的对吗?
发布于 2009-09-23 21:58:43
动态链接库有自己的段,这些段使用比text+data+bss更复杂的模型映射到地址空间。不会尝试拆分动态链接库并将其与原始文本、数据或bss段连接。
静态变量永远不会用代码初始化。如果它是一个可写的段,它将被按需从磁盘分页到您的地址空间,在那里它将成为一个私有映射。如果它是不可写的,你可能只是链接到一个已经加载的共享页面,但最终静态变量会在某个映像中初始化,并被分页到RAM中。
链接程序中的任何给定数据段通常不能像堆栈或堆那样增长,不。
https://stackoverflow.com/questions/1467524
复制相似问题