gpt4 book ai didi

c++ - 在可以一次性丢弃的区域内动态构建对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:49:27 25 4
gpt4 key购买 nike

为了构建一个类似缓存的数据结构,我想做以下事情:

我想要一个 class Cache 在某个预定义大小的内存区域中构建和管理一些数据结构。

为了构建数据结构,Cache 类应该能够使用标准类,例如 vector。现在,Cache 类(直接或间接)动态分配的所有对象都应该进入内存中的预定义区域,我希望能够一次性丢弃所有对象(即不破坏每个单独的对象)通过简单地将其归零(或忘记它)。我知道这不符合标准。

我想到了以下方法:

alter_operator_new_to_allocate_everything_within_my_cache_area ();
cache.cacheMyObjects (...);
alter_operator_new_into_normal_behaviour ();

问题:

  • 是否描述了这种方法或类似问题的解决方案任何地方?
  • 这行得通吗?
  • 或者对于我的问题有更好的解决方案吗?

当然,我也可以尝试从头开始编写仅使用 POD 数据结构的缓存类,但在许多情况下这将意味着重新发明轮子。

我只需要适用于 VS2013/2015 和 Windows 的解决方案。

最佳答案

我相信您要解决的问题可以通过自定义分配器来解决。

您可以预先分配缓存所需的大块连续内存。然后,您可以定义一个自定义分配器对象,以始终从该内存块进行分配。然后将该分配器对象传递给 std::vector 或任何其他数据结构 [参见 http://www.cplusplus.com/reference/vector/vector/ , 第二个模板参数]。

您的分配器类必须实现在 allocator_traits 中声明的成员:http://en.cppreference.com/w/cpp/memory/allocator_traits

例子:

class my_allocator {
void* memory_block;
my_allocator() { memory_block = malloc( ... ); }
~my_allocator() { free(memory_block); }
void* allocate(..) { ..assign from memory_block.. }
};

class Cache {
my_allocator my_alloc;
std::vector< int, my_alloc > my_vector;

..other data..
};

从今以后,您的 vector 将始终从 memory_block 分配。如果您对缓存中的所有数据结构执行此操作,它将始终使用相同的连续内存。(我没有编译代码,所以语义可能有些不同)

关于c++ - 在可以一次性丢弃的区域内动态构建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31761180/

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