我有一个cpp文件,我从中生成一个共享库(使用autofoo等)。在cpp文件中,我已经声明了一些我在整个库函数中使用的静态字段。
我的问题是两部分:
1)这些字段存储在内存中的哪个位置?它不像系统实例化整个库并将其保存在内存中......毕竟,库实际上只是一堆钩子。
2)有更好的方法吗?我之所以这样做的原因是我想避免要求用户将字段作为参数传递给每个库函数调用。
谢谢!
答案 0 :(得分:3)
用于加载共享库的代码:
通常(每个都有轻微的技术差异):
注意:共享的lib加载程序不需要在加载点完成所有这些操作 它可能懒洋洋地完成其中一些工作(实现细节)。但它们将在使用前完成。
任何全局staic POD变量(没有构造函数的东西)。将根据天气的初始化或不存储而存储在特殊的内存段中(同样是实现细节)。如果它们已初始化,那么它们将使用已定义的值从磁盘(或共享lib源)加载。
所以问题的答案是:
答案 1 :(得分:1)
从逻辑上讲, 就像系统实例化整个库一样。在实践中,只有代码才真正在共享库中“共享”,任何链接它的人都将获得数据的副本。 (好吧也许不是只读数据)。所以,到目前为止你的问题是:
1)您的流程将以某种方式获取变量的副本(取决于您的操作系统上的共享库系统如何工作)。
2)我认为这种方法没有问题。