gpt4 book ai didi

c++ - 在自定义内存管理器中使用 vector

转载 作者:行者123 更新时间:2023-11-30 03:04:25 24 4
gpt4 key购买 nike

我正在用 C++ 编写一个内存管理器。目的是在开始时使用 malloc 分配一定数量的内存,然后重载 new 和 delete 以便它使用该内存。我几乎让它工作了,我唯一的问题是我如何跟踪内存中的位置。

我创建了一个结构 vector ,其中包含大小、位置以及是否空闲等信息。

问题是当我调用 push_back 时它试图使用我重载的新函数。这是它失败的地方,因为它不能使用我重载的新信息,直到它推回第一个信息结构。

有谁知道我该如何解决这个问题或跟踪内存的更好方法?

最佳答案

不要重载全局operator new!

最简单且(警告;主观->)最佳解决方案是定义您自己的分配器,您将在处理免费商店的分配时使用它(又名。堆)。所有 STL 容器都支持将 AllocatorType 作为模板参数传递。

重载全局 operator new/operator delete 似乎是一个很好的解决方案,但我几乎可以向你保证,随着开发的进行,它会给你带来麻烦。

在这个定制的分配器中,你可以跟踪发生了什么,但是创建内部的 std::vector(或者你想使用的任何东西,一个 std::map 似乎更适合我)将使用默认的 operator new/operator delete


如何创建自己的分配器?

下面的链接将引导您找到一份包含有关此事的信息的不错的文档:


在需要/需要时使用自定义分配器将使您在尝试为将分配内存的分配器分配内存时不会遇到任何先有鸡还是先有蛋的问题,但是分配器必须已分配内存才能使用分配器方法。除了分配器之外,什么将为分配器分配内存?好吧,我们需要为该分配器分配内存,并且该分配器必须有自己的分配器,尽管该分配器需要由另一个分配器提供的内存?

也许我应该给自己养条狗,它们不下蛋 - 对吗?

关于c++ - 在自定义内存管理器中使用 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8620940/

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