在我写自己之前,我会问你们所有人.
我正在寻找一个几乎完全像STL向量的C++类,但是将数据存储到堆栈中的数组中.某种类型的STL分配器类也可以工作,但我试图避免任何类型的堆,甚至是静态分配的每线程堆(尽管其中一个是我的第二选择).堆栈效率更高.
它需要几乎替代使用向量的当前代码.
对于我自己要写的东西,我在考虑这样的事情:
char buffer[4096];
stack_vector<match_item> matches(buffer, sizeof(buffer));
Run Code Online (Sandbox Code Playgroud)
或者类可以在内部分配缓冲区空间.然后它看起来像:
stack_vector<match_item, 256> matches;
Run Code Online (Sandbox Code Playgroud)
我认为如果空间不足,它会抛出std :: bad_alloc,尽管这不应该发生.
更新
使用Chromium的stack_container.h效果很好!
我之所以没想过这样做的原因是我总是忽略了STL集合构造函数的allocator对象参数.我已经使用了几次模板参数来做静态池,但是我从未见过代码或编写任何实际使用过对象参数的代码.我学到了新东西.很酷!
代码有点乱,由于某种原因,GCC强迫我将分配器声明为实际项而不是将其构造为vector的allocator参数.它来自这样的事情:
typedef std::pair< const char *, const char * > comp_list_item;
typedef std::vector< comp_list_item > comp_list_type;
comp_list_type match_list;
match_list.reserve(32);
Run Code Online (Sandbox Code Playgroud)
对此:
static const size_t comp_list_alloc_size = 128;
typedef std::pair< const char *, const char * > comp_list_item;
typedef StackAllocator< comp_list_item, comp_list_alloc_size > comp_list_alloc_type;
typedef std::vector< comp_list_item, comp_list_alloc_type > comp_list_type;
comp_list_alloc_type::Source match_list_buffer;
comp_list_alloc_type match_list_alloc( &match_list_buffer );
comp_list_type match_list( match_list_alloc );
match_list.reserve( comp_list_alloc_size ); …Run Code Online (Sandbox Code Playgroud) 我有两个问题:
1)是否可以实现使用alloca在堆栈上分配内存的分配器,否则符合C++ STL?
如果那里有代码,只需将我指向URL即可让我高兴.:-)如果那里没有代码,也许你可以草拟函数allocate和deallocate?
2)如果对上述问题的回答为"是",我想了解如何为类成员在堆栈上分配内存.举个例子,考虑一下
std::vector<int, AllocaAllocator<int> >
Run Code Online (Sandbox Code Playgroud)
并且假设对该向量的成员函数'resize'的调用首先调用'deallocate'然后'分配'分配器.
调用allocate的范围是成员函数resize的范围.这是不是意味着在该函数调用结束时从堆栈中删除了已分配的内存?
亲切的问候,Bjoern