gpt4 book ai didi

c++ - 替换默认的 STL 分配器

转载 作者:IT老高 更新时间:2023-10-28 21:52:59 26 4
gpt4 key购买 nike

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

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

我的下一个想法是一个愚蠢的 C 宏技巧,但这似乎是不可能的,尽管我承认自己不是一个聪明的宏作者。

所以我想“是否有编译器或编译指示开关在编译时指定分配器<> 类”?但我愿意接受任何事情。

如果有人能提出解决方案,我要问的下一个问题是,如何在包含此库的文件集中对 new/delete 执行相同的操作。

我正在使用 gcc 3.4.4 工具链在 Cygwin 下运行它,目标是 VxWorks,如果这能激发任何想法的话。

最佳答案

我求助于预处理器来获得一个可能的解决方案,尽管它目前依赖于 GCC 3.4.4 实现来工作。

海合会 <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 时才有效。

关于c++ - 替换默认的 STL 分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8247552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com