gpt4 book ai didi

android - 如何使内联函数在可执行文件中只占用一份内存空间

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:29 28 4
gpt4 key购买 nike

有没有办法让一个内联函数(肯定已经被编译器内联),它出现在程序的多个位置,只占用可执行文件中尽可能多的内存,就好像它不是内联的一样/或者只有一个内联实例?从理论上讲,这应该是可能的,因为该函数只需从内存中加载一次,并且其加载的内容(在 RAM 和/或缓存中)将被复制到 RAM 中的其他必要位置,以提高性能并减少占用硬盘空间。 Android 是我主要关心的问题,但我也希望能听到有关除 android 以外的其他操作系统的答案。

最佳答案

看来你也想吃蛋糕。内联的全部意义在于将函数的副本放在其调用的位置。

但这不应该让您太担心,因为在许多情况下,内联代码比原始函数小得多,因为它错过了寄存器保存/恢复,并且由于在编译时对其进行了评估而删除了其中的某些部分时间等。如果您的函数相对较小,内联它实际上可能会生成比实际调用现有函数副本所需的代码更小的代码。

如果您认为代码大小可能存在问题,您真的应该发布一些示例并解释为什么您认为这是一个问题。

目前最接近您描述的是 JIT(即时)编译,它允许您拥有一个以高级(因此可能非常紧凑)表示形式编写的函数的单个副本,以后可以翻译即时生成机器代码。顺便说一下,这就是 Android 的 VM 所做的。


如果您担心程序加载时间,您可能不应该担心少数功能。首先,代码将从设备加载(很可能)为 4 KiB 页面。要减少加载时间,您需要将代码大小至少减少 1 页才能有所改进,否则您实际上什么也得不到。

请记住,数据通常从非 volatile 存储中加载一次并保存在操作系统缓存中,例如在大多数情况下,代码已经在 RAM 中。

即使您能够实现您想要的(使用某种 JIT 翻译),您也应该记住,即时进行翻译也会花费时间并且需要更多的 RAM,因为您将同时保留原始的高级代码和生成的机器代码,从而将数据推出缓存,可能会降低其他程序的加载速度。

关于android - 如何使内联函数在可执行文件中只占用一份内存空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47341738/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com