我有大量使用STL容器和字符串的大型(> 250个文件)库的源代码。我需要在一个有限的堆的嵌入式环境中运行它,所以我想确保这个库本身在堆的使用上受到限制。替换默认的STL分配器
显而易见的解决方案是创建一个分配器,但修改整个代码库以包含分配器模板参数是最后一招,而且如果我想要采用新版本的源代码,这是不可取的。全局替换新的和删除是不可行的,因为它会影响整个图像,而不仅仅是这个库。
我的下一个想法是愚蠢的C代码宏伎俩,但似乎并不像它会是可能的,虽然我承认我不是一个聪明的宏作者。
所以我想“有没有编译器或编译开关来指定分配<>在编译时类”?但我对任何事情都是开放的。
下一个问题我要问,如果有人能拿出一个解决方案,是怎么做的新的同/设定包括这个库文件中删除。
我用gcc 3.4.4工具链在Cygwin下运行它,用的VxWorks的目标,如果火花任何想法。
gcc 3.4.4这已经足够老了,被标记为“完全破碎”。任何你不换用新版本的原因? – sehe
我认为在GCC中,这只是一个简单的宏,在内部应该可以切换。默认是“新的分配器”,但GCC带有几个选择,比如“malloc分配器”和池分配器等等。 –
假设你可以创建一个有限的堆,然后只为这个库重载'operator new',所以库中的所有'operator new'调用都会进入你有限的堆。当有限的堆满了并且调用了重载的'operator new'时,你想要什么样的行为?你真的想在这种情况下让'operator new'失败吗?我不相信你会这样,除非这个库在'operator new'失败时仍然可以运行。也许如果库是一个数据库缓存,或类似的东西。图书馆做什么? –