假设我有这个函数共享库,其中“我”是一些全局variables。
int foo() { return i++; }
当我从多个进程调用这个函数时,每个进程中“i”的值是独立于其他进程的。
这种行为是相当期待的。
我只是想知道如何通常由链接器实现这种行为? 根据我的理解,代码是在进程之间共享的,所以variables必须在使用这个库的每个程序的所有地址空间中具有相同的虚拟地址。 这种情况对我来说似乎相当困难,所以我想我在这里错过了一些东西,而且做法不一样。
在这个信号处理程序中会发生什么?
在Linux上的C + +装载NTFS设备?
以编程方式更改Internet Explorer设置?
运行exe作为系统帐户
我可以得到一些关于这个问题的更详细的信息?
从线程 – CSharp WPF启动时,模式popup窗口失败
使用boost python的python模块是空的?
DataGridView不填充
对于在另一个模块中定义的符号,insmod会失败,并显示“模块中的未知符号”
运行时的动态链接过程(与静态链接过程非常相似)为每个进程分配单独的数据(和bss)段,并将这些数据映射到进程地址空间中。 只有文本段在进程之间共享。 这样,每个进程都获得自己的静态数据副本。
代码在进程之间共享,所以变量必须在使用这个库的每个程序的所有地址空间中具有相同的虚拟地址
代码不会按照您的想法共享。 是的,动态共享对象只能被加载一次,但是内存引用或者堆栈或者堆所使用的代码并不共享。 只有包含代码的部分是共享的。
每个进程都有自己独特的地址空间,所以当一个进程访问这个变量时,它可以有不同的值,然后另一个进程。 如果进程应该共享相同的内存,他们将不得不专门设置。 共享库是不够的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。