- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
为了构建一个类似缓存的数据结构,我想做以下事情:
我想要一个 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/
我有数百个位置的列表,只想显示当前屏幕上这些位置的 MKPinAnnotation。屏幕从 2 英里半径内的用户当前位置开始。当然,用户可以滚动和缩放屏幕。现在,我等待 map 更新事件,然后循环遍历
我试过检查 CGRect: CGFloat imageX1 = imageView.frame.origin.x; CGFloat imageY1 = imageView.frame.origin
我是一名优秀的程序员,十分优秀!