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
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_back和printf,所以输出可能不是42,它可能会崩溃,或任何其它事物.