我有两个问题:
1) 是否有可能实现一个分配器,它使用 alloca 在堆栈上分配内存并且在其他方面与 C++ STL 兼容?
如果那里有代码,您只需将 URL 指向我就可以让我高兴。 :-) 如果那里没有代码,也许您可以勾勒出分配和解除分配的函数?
2) 如果上述问题的答案是"is",我想了解如何在堆栈上为类成员分配内存。例如,考虑一个
std::vector<int, AllocaAllocator<int> >
并假设调用此 vector 的成员函数“resize”首先调用分配器的“deallocate”,然后调用“allocate”。
调用 allocate 的范围是成员函数 resize 的范围。这是否意味着分配的内存在该函数调用结束时从堆栈中删除?
亲切的问候, 比约恩
最佳答案
Bjoern,看来您从根本上误解了堆栈和分配的工作原理。了解它们。
你问的是不可能的,因为当你从分配它的函数返回时,alloca 分配的内存被“释放”(不像帕特里克说的那样,内联不能改变它的行为)。我写“释放”是因为它实际上并没有被释放,它只是像任何其他堆栈变量一样超出了范围。所以之后使用它会导致未定义的行为。
假设您在 YourAllocator::allocate
中分配了一 block 内存,这是从 d.push_back()
调用的:
deque<int, AllocaAllocator> d;
d.push_back(42); // calls alloca
printf("Hello\n");
printf("%d\n", d[0]);
alloca分配的内存可能会被push_back
和printf
的栈帧覆盖,所以输出可能不是42,可能会崩溃,或者其他任何
关于c++ - 是否有一个分配器使用 alloca 并且在其他方面与 C++ STL 兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4082532/