什么是内存中函数调用?有人可以请我指点一些资源,讨论这种技术及其优点。我需要更多地了解他们,目前不知道该去哪里。谷歌似乎没有帮助,因为它把我带到了认知和神经系统等领域。内存中函数调用
内存中函数调用
回答
假设你的解释性评论是正确的(我必须看到你的问题的原始来源以确保.. )这可能是(a)函数绑定时间或(b)demand paging的问题。
功能绑定
当一个程序启动时,连接器/加载器发现不属于文件中解析可执行文件中的所有函数引用。它搜索所有链接库以查找缺失的函数,然后进行迭代。至少Linux ld.so(8)
链接器/加载器支持两种操作模式:LD_BIND_NOW
强制所有符号引用在程序启动时解析。这非常适合查找错误,这意味着首次使用函数和重复使用函数没有任何损失。它可以大大增加应用程序加载时间。如果没有LD_BIND_NOW
,功能将根据需要进行解析。这对于与大型库链接的小程序非常有用,因为它只能解决所需的少量功能,但对于较大的程序,这可能需要在程序生命周期内从磁盘重新加载库,而且可以显着影响影响应用程序运行的响应时间。
按需分页
现代操作系统内核耍弄更virtual memory比物理存储器。无论机器中安装的物理内存的实际数量多少,每个应用程序都认为它可以访问4 GB内存(对于32位应用程序)或更多内存(对于64位应用程序)的整个机器。每页内存需要一个备份存储,如果页面必须在内存压力下从物理内存中移出,将用于存储该页面的驱动器空间。如果它是纯粹的数据,它将被存储在交换分区或交换文件中。如果它是可执行代码,那么它将被简单地删除,因为如果它需要是,它可以在未来从文件中重新加载。请注意,这不会在逐个功能的基础上发生 - 相反,它发生在页,这是一个与硬件相关的功能。在大多数32位平台上考虑4096个字节,或许在其他架构上可能或多或少,并且使用特殊的框架,大于2兆字节或4兆字节。如果缺少页面的引用,memory management unit将发出page fault
的信号,内核将从磁盘加载丢失的页面并重新启动进程。
嗨,我很好奇,如果一个可执行文件编写得不好,它有很多像外部函数(比如.so文件)引用类似函数的死代码,但只有100个这样的函数在运行时被实际调用,LD_BIND_NOW = 1会比LD_BIND_NOW没有设置?因为过程连接表将包含900个无用的功能地址?在内存占用和性能的意义上更糟(因为我不知道查找是否为O(n))。提前致谢! – Hei 2017-12-19 00:58:37
@Hei,最好问这是一个新问题,以获得获得高质量答案的最佳机会。我怀疑这种情况下的LD_BIND_NOW性能与需求绑定相比会非常痛苦,但LD_BIND_NOW的安全性好处可能使得它的价值完全相同。 – sarnold 2018-01-05 00:40:35
谢谢。刚刚开始另一篇文章:https://stackoverflow.com/questions/48109146/ld-bind-now-can-make-the-executable-run-slower – Hei 2018-01-05 07:37:26
- 1. 调用函数在内存地址x86_x64
- 2. python调用函数内部的函数
- 3. 调用函数内的函数 - Javascript
- 4. 函数内部的JavaScript-调用函数
- 5. 函数内的调用函数
- 6. 在函数内调用函数
- 7. Smarty调用函数内的函数
- 8. 函数内调用函数 - Flash ActionScript 2.0
- 9. Mootools类 - 在函数内调用函数
- 10. 从函数内部调用Python函数
- 11. 从函数内部调用函数?
- 12. 模板内函数调用
- 13. 调用内部函数?
- 14. shellcode内调用函数
- 15. 内部调用函数RequireJS
- 16. jQuery - 调用内联函数
- 17. 当多个同名函数在内存中调用特定的javascript函数
- 18. 内存使用Perl函数
- 19. 调用Cuda内核中的Opencv函数
- 20. CUDA:在内核中调用库函数
- 21. 在PowerShell 2.0中需要参数的函数内调用函数
- 22. 在存储过程中调用“函数”
- 23. 内存错误与函数调用大量参数
- 24. 在一个类内的函数内调用一个函数
- 25. 如何在函数内的函数内调用$(this)?
- 26. 内联函数调用静态内联函数
- 27. 如何在构造函数类中调用内部函数?
- 28. 如何在C++中调用函数内部的函数?
- 29. 在jQuery中调用函数内部的外部函数
- 30. Spark集群中的RDD映射函数内调用函数
你能更好地指定你的意思吗?你在哪里读过这个词? – sarnold 2011-05-22 23:48:54
尽我所知:如果一个程序或一组程序非常大,在运行时,它们被分配的内存被认为是按功能分配的。这意味着,对于一组活动的程序,某些功能在内存中(这意味着调用很快),而其他功能则不在内存中,因此调用速度较慢。这个想法是以某种方式只能调用(尽可能)一次在内存中的函数。 – Ketan 2011-05-23 00:31:24
6个问题,没有被接受的答案? – Joe 2011-05-23 01:58:02