gpt4 book ai didi

c - 是否可以在 C 中进行热代码交换?

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:49 25 4
gpt4 key购买 nike

这个

en.wikipedia.org/wiki/Hot_swapping#cite_note-1

说 VS 可以在其调试器的帮助下完成它。 gdb 是否提供类似的功能?

这是我能找到的最接近的,但似乎还没有准备好使用:

http://www.aitdspace.gr/xmlui/handle/123456789/219

dlopen/dlsym/dlclose 也很接近,但不适用于 -lmylib 引用的库(引用计数永远不会达到 0)。

我考虑过的备选方案:

1) 使用 -Wl,-wrap,foo 和 __wrap_foo() { func = dlopen();功能();

2) 使 libfoo.so 成为共享库,当我们需要热交换时,我们 dlopen(RTLD_GLOBAL) 加载新代码并为下一次调用 foo() 提供更新的符号;

1) 效果不是很好,因为它需要我枚举所有我想热插拔的功能,这是所有的功能。

2) 效果不佳,因为调用 foo() 时会加载新代码,但 foo 永远具有对该符号的引用。多次调用 dlopen 使 foo 被重新评估。

最佳答案

您可能对 Ksplice 感兴趣。这是一项来自麻省理工学院的技术,允许在不重新启动的情况下将软件补丁应用到 Linux 内核。这与应用安全更新最相关:

http://www.ksplice.com/paper

关于c - 是否可以在 C 中进行热代码交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3973498/

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