【发布时间】:2014-07-09 19:07:32
【问题描述】:
我正在嵌入式系统上编写应用程序。我需要某种类型的关联容器才能访问基于字符串的某个指针。目前我正在使用地图(即std::map<char*, SomeType*, CustomComparator>)。我使用 char* 作为键类型,因为我正在与其他必须支持 std::string 的库进行通信,并且我不想继续来回转换。
但我遇到了一个意想不到的问题。 std::map 的每个实例(即新类型)在生成的二进制文件中占用大约 10Kb(没有优化,用于调试目的)。由于我的 ROM 被限制在 500Kb 左右,而且我可能需要几十个,这是一个相当大的缺点(我想在实际硬件上进行调试,如果程序不适合我就不能这样做) .如果可能的话,我希望能够在对数时间内访问这些项目。我不想诉诸于使用数组并循环遍历每个项目,直到找到我正在寻找的那个。插入不必很快,因为这仅在启动期间完成。删除仅在关机期间执行,因此它们也不是问题。
有没有人有我可以使用的替代想法(最好是 STL)?
注意:我仅限于 C++03。
【问题讨论】:
-
std::map的每个实例是指std::map的单独实例化还是std::map相同类型的实例? -
“std::map 的每个实例在生成的二进制文件中占用大约 10Kb”。你如何创建实例?你是怎么测量尺寸的?
-
您是否考虑过使用已排序的
std::vector和std::lower_bound?无开销的对数访问。原因插入和删除变得缓慢。 -
好的,我现在看到您已经回答了另一条评论中的第一个问题。我只能重复一遍:别担心,要快乐。这 10Kb 的大部分是调试信息。它是为每种新类型单独创建的。它将在发布 exe 中全部消失。如果您仍然担心,请将
std::map<char*, void*, CustomComparator>)包裹在一个薄的、完全内联的、模板化的类型安全层中。程序执行时调试信息甚至不应该加载到内存中,它位于文件中并且只能由调试器读取,因此您的 RAM 大小无关紧要(磁盘大小)。
标签: c++ stl embedded containers c++03