[C++] 替换默认的STL分配器


Answers

尽管目前依靠GCC 3.4.4的实现工作,但我使用预处理器来获得可能的解决方案。

GCC <memory>实现包含文件<bits/allocator.h> ,该文件又包含另一个文件<bits/c++allocator.h> ,它定义了一个定义实现默认分配器基类的类的宏。

因为在依赖于平台的路径中找到/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/i686-pc-cygwin/bits ,所以我不觉得它非常脏与我自己的“依赖于平台”的实现。

所以我只是在我的源代码包含路径的根目录下创建一个文件夹bits/ ,然后在该文件夹中创建文件c++allocator.h 。 我将所需的宏定义为我的分配器类的名称,它的作用就像一个魅力,因为在搜索系统包含之前,gcc搜索我的包含路径。

感谢您的回复。 我想我可以用这个“解决方案”,这个解决方案只有在我使用3.4.4的时候才会起作用。

Question

我有大量(> 250个文件)库的来源,大量使用STL容器和字符串。 我需要在一个有限堆的嵌入式环境中运行它,所以我想确保这个库本身在堆的使用上是有限的。

显而易见的解决方案是创建一个分配器,但是修改整个代码库以包含分配器模板参数是一个不得已而为之的大事,如果我想要采用新版本的源代码,这是不可取的。 全局替换新的和删除是不可行的,因为这会影响整个图像,而不仅仅是这个库。

我的下一个想法是一个愚蠢的C宏技巧,但似乎并不可能,虽然我承认不是一个聪明的宏观作者。

所以我想“编译时是否有编译器或编译指示开关来指定分配器<>类”? 但是我为任何事情开放。

下一个问题,我会问,如果任何人可以想出一个解决方案,是如何做同样的新组成的文件组成的这个库中删除/删除。

我正在使用gcc 3.4.4 toolchain在Cygwin下运行这个目标为VxWorks的,如果这激发了任何想法。