为什么C语言不支持热更新?

 2024-03-11 04:03:56  阅读 0

理论上这是可以做到的。 Linux调整mmap,prot指定这块内存被指定为可执行文件。 然后将可执行代码复制到内存中,然后jmp。 但我个人觉得其实还有很多问题需要解决。 例如,在代码中定义全局变量。 编译时,主程序的bss段(变量存储区)已经预先分配好。 热更新的程序也有自己的全局变量。 这时候我们是不是应该把热更新程序的bss段和主程序的bss段合并呢? 然后将程序代码段中的所有访问地址更新为自己的全局变量? 其次,如何解决热更新代码段中所有外部函数的调用。 直接方式是通过链接将其打包到热更新程序代码段中。 最糟糕的是热更新代码段占用太多空间。 如果热更新程序也使用link,是否应该销毁自己的got表,使用主程序的got表,然后在热更新代码段中更新所有外部函数调用符号表? 如果热更新代码引用了主程序未加载的so文件,那么主程序可以自动识别缺失的so文件并加载。 如果热更新代码中引用了字符串、常量等数据,数据段是否也需要合并到主程序中? 如果热更新程序要导出外部函数,是否需要复制符号表? 如果你自己做这一切,只要你的老板没有反对就完全可以。

标签: c语言

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码