最近在学习 UEFI(提议的 BIOS 替代品)时,我尝试编写一些东西并使用 EDK2 进行编译。 ides 是生成 .EFI 二进制文件,我可以在进入 UEFI shell 时启动它。我能够这样做。完美!
现在我的代码涉及纯 C 风格(基本上缺少 C++ 功能,例如类、构造函数、虚拟和 STL 容器类)。我想知道我是否可以使用 STL 容器类(如字符串、 vector 、 HashMap )并且仍然能够为 UEFI 编译和运行我的 .EFI?
我研究了一下,发现了很多令人沮丧的地方!基本上,我收集到的是:
- UEFI 与 C 紧密相关。开源实现不支持 C++
- 不支持新建和删除。
- vtable 生成依赖于编译器,因此生成的代码不可移植
除此之外,还有很多东西可以从这个网站学到: UEFI Programming
但不幸的是,我感到很困惑!
我的问题是我可以在我的代码中使用 STL 类 (std::string/std::vector/std::map) 并使用 EDK2 为 UEFI 环境编译它吗?
如果有人能指出我要寻找的解决方案/方向,我将不胜感激。现在,我正在使用的唯一选择是在此处找到的容器的 C 实现: UTHash implementation
有办法吗?
最佳答案
问题不在于内存或 vtable。 UEFI 具有高效的动态内存分配。并且可以实现new和delete。和 vtable 一样,在内部它只是一个普通的 C 结构!但问题是 STL 抛出异常。异常(exception)情况取决于平台/操作系统。在 Windows STL 异常中,底层使用 SEH(结构化异常处理),它依赖于操作系统并且与线程内部密切相关。在 UEFI 中没有这样的机制,但它可以实现。尽管这是一项非常重要的任务。
关于c++ - UEFI 编译代码中的 STL 容器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22170907/