gpt4 book ai didi

linux - dll 中的静态变量进入进程内部的哪个段?

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:30 25 4
gpt4 key购买 nike

exe中的静态变量进入进程的数据段并在启动时初始化的过程。

因此,如果我的进程动态加载一个库,该库使用 dlopen 或其他方式包含静态变量,这些静态变量将加载到哪个段被映射到。还有这些静态变量什么时候初始化?

我的理解是进程中的数据段是固定的,不能像堆栈或堆那样增长。我说得对吗?

最佳答案

dll 有自己的段,使用比 text+data+bss 更复杂的模型映射到地址空间。不会尝试拆分动态链接库并将其与您的原始文本、数据或 bss 段连接。

静态变量永远不会用代码初始化。如果它是一个可写段,它将按需从磁盘分页到您的地址空间,在那里它将成为一个私有(private)映射。如果它不可写,您可能只是链接到一个已经加载的共享页面,但最终静态变量在图像中的某处初始化,并分页到 RAM 中。

链接程序中的任何给定数据段通常不能像堆栈或堆那样增长,不。

关于linux - dll 中的静态变量进入进程内部的哪个段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com