最近在学习UEFI(建议更换BIOS)时,我尝试编写一些东西并使用EDK2进行编译。 ides是生成.EFI二进制文件,我可以在进入UEFI shell时启动它。我能够这样做。完美!
现在我的代码涉及纯C风格(基本上缺少C ++工具,例如类,构造函数,虚拟和STL容器类)。我想知道我是否可以使用STL容器类(如字符串,向量,哈希映射),仍然能够为UEFI编译和运行我的.EFI?
我研究了一下,发现了很多沮丧!基本上,我收集的是:
此外,还有很多东西需要从这个网站上学到: UEFI Programming
但不幸的是我感到困惑!
我的问题是我可以在我的代码中使用STL类(std :: string / std :: vector / std :: map)并使用EDK2为UEFI环境编译它吗?
如果有人能指出我要寻找的解决方案/方向,我将不胜感激。现在,我正在使用的唯一选择是在此处找到的一个容器C-Implementation: UTHash implementation
有办法吗?
答案 0 :(得分:2)
问题不在于内存或vtable。 UEFI具有高效的动态内存分配。并且可以实现new和delete。除了vtable,内部它只是一个普通的C结构!但问题是STL 拖欠异常。并且例外是平台/ OS依赖的。在Windows下,STL异常使用SEH(结构化异常处理),它取决于操作系统,并且与线程内部结构紧密相关。在UEFI中没有这样的机制,但它可以实现。尽管这是一项非常重要的任务。
答案 1 :(得分:1)
第2点不应该是一个主要问题。对new
和delete
的依赖主要来自std::allocator
,这是每个容器模板的默认参数。但这只是一个默认值。提供您自己的分配器(使用UEFI上可用的任何内存分配),您很有可能使其工作。
你的STL实现不太可能使用vtable,所以3也不是什么大问题。但是,<iostream>
将是另一回事。