什么是内存函数调用?有人可以指点我讨论这种技术及其优点的一些资源。我需要了解更多关于它们的信息,目前还不知道该去哪里。谷歌似乎没有帮助,因为它带我进入认知和神经系统等领域。
答案 0 :(得分:1)
假设您的解释性评论是正确的(我必须看到您的问题的原始来源,以确定...),这可能是(a)函数绑定时间或(b)demand paging的问题
功能绑定
当程序启动时,链接器/加载程序会在可执行文件中找到文件中无法解析的所有函数引用。它搜索所有链接的库以找到缺少的函数,然后迭代。至少Linux ld.so(8)
链接器/加载器支持两种操作模式:LD_BIND_NOW
强制在程序启动时解析所有符号引用。这对于发现错误非常有用,这意味着首次使用函数与重复使用函数不会有任何损失。它可以大大增加应用程序加载时间。如果没有LD_BIND_NOW
,则会根据需要解析函数。这对于链接大型库的小程序非常有用,因为它只能解决所需的少数功能,但对于较大的程序,这可能需要在程序的生命周期内反复从磁盘重新加载库,以及在应用程序运行时,可以彻底影响响应时间。
需求分页
现代操作系统内核比物理内存更多地virtual memory。无论机器中安装的实际物理内存量如何,每个应用程序都认为它可以访问整个4 GB内存(对于32位应用程序)或更多内存(对于64位应用程序)。每页内存都需要一个后备存储,如果必须在内存压力下将页面推出物理内存,则该驱动器空间将用于存储该页面。如果它是纯数据,则它存储在交换分区或交换文件中。如果它是可执行代码,那么它就会被删除,因为如果需要,将来可以从文件中重新加载。请注意,这不会在逐个函数的基础上发生 - 相反,它发生在 pages 上,这是一个依赖于硬件的功能。在大多数32位平台上考虑4096字节,或许在其他架构上或多或少,并使用特殊框架,超过2兆字节或4兆字节。如果存在缺少页面的引用,memory management unit将发出page fault
信号,内核将从磁盘加载缺少的页面并重新启动该过程。