是否有使用alloca的分配器,否则符合C++ STL?

Bjo*_*ern 10 c++ stack stl alloca allocator

我有两个问题:

1)是否可以实现使用alloca在堆栈上分配内存的分配器,否则符合C++ STL?

如果那里有代码,只需将我指向URL即可让我高兴.:-)如果那里没有代码,也许你可以草拟函数allocate和deallocate?

2)如果对上述问题的回答为"是",我想了解如何为类成员在堆栈上分配内存.举个例子,考虑一下

std::vector<int, AllocaAllocator<int> > 
Run Code Online (Sandbox Code Playgroud)

并且假设对该向量的成员函数'resize'的调用首先调用'deallocate'然后'分配'分配器.

调用allocate的范围是成员函数resize的范围.这是不是意味着在该函数调用结束时从堆栈中删除了已分配的内存?

亲切的问候,Bjoern

ybu*_*ill 5

Bjoern,看起来你从根本上误解了堆栈和alloca是如何工作的.了解他们.

你问的是不可能的,因为当你从分配它的函数返回时,alloca分配的内存被"释放"(并且与Patrick说的不同,内联不能改变它的行为).我写"释放"因为它实际上没有被释放,它只是像其他任何堆栈变量一样超出范围.因此,之后使用它会导致未定义的行为.

假设您分配了一块内存,YourAllocator::allocate其中调用了d.push_back():

deque<int, AllocaAllocator> d;
d.push_back(42); // calls alloca
printf("Hello\n");
printf("%d\n", d[0]);
Run Code Online (Sandbox Code Playgroud)

通过ALLOCA分配的存储器可以由堆叠帧被覆盖push_backprintf,所以输出可能不是42,它可能会崩溃,或任何其它事物.