假设我有这个函数共享库,其中“我”是一些全局variables。
int foo() { return i++; }
当我从多个进程调用这个函数时,每个进程中“i”的值是独立于其他进程的。
这种行为是相当期待的。
我只是想知道如何通常由链接器实现这种行为? 根据我的理解,代码是在进程之间共享的,所以variables必须在使用这个库的每个程序的所有地址空间中具有相同的虚拟地址。 这种情况对我来说似乎相当困难,所以我想我在这里错过了一些东西,而且做法不一样。
在这个信号处理程序中会发生什么?
在linux上的C + +装载NTFS设备?
以编程方式更改Internet Explorer设置?
在system()函数中使用variablesc ++
运行exe作为系统帐户
我可以得到一些关于这个问题的更详细的信息?
从线程 – CSharp WPF启动时,模式popup窗口失败
使用boost python的python模块是空的?
从另一个应用程序窗口获取集中控制的句柄
DataGrIDVIEw不填充
对于在另一个模块中定义的符号,insmod会失败,并显示“模块中的未知符号”
运行时的动态链接过程(与静态链接过程非常相似)为每个进程分配单独的数据(和bss)段,并将这些数据映射到进程地址空间中。 只有文本段在进程之间共享。 这样,每个进程都获得自己的静态数据副本。
代码在进程之间共享,所以变量必须在使用这个库的每个程序的所有地址空间中具有相同的虚拟地址
代码不会按照您的想法共享。 是的,动态共享对象只能被加载一次,但是内存引用或者堆栈或者堆所使用的代码并不共享。 只有包含代码的部分是共享的。
每个进程都有自己独特的地址空间,所以当一个进程访问这个变量时,它可以有不同的值,然后另一个进程。 如果进程应该共享相同的内存,他们将不得不专门设置。 共享库是不够的。
总结以上是内存溢出为你收集整理的共享库中的全局variables如何链接?全部内容,希望文章能够帮你解决共享库中的全局variables如何链接?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)