我有两个问题:
1) 是否可以实现一个使用 alloca 在堆栈上分配内存并且符合 C++ STL 的分配器?
如果有代码,您只需将 URL 指向我即可让我高兴。 :-)
如果没有代码,也许您可以画出分配和释放函数的草图?
2)如果上述问题的答案是“是”,我想了解如何在堆栈上为类成员分配内存。作为一个例子,考虑一个
std::vector<int, AllocaAllocator<int> >
并假设对该向量的成员函数“resize”的调用首先调用分配器的“deallocate”,然后调用“allocate”。
调用 allocate 的范围是成员函数 resize 的范围。这是否意味着在该函数调用结束时分配的内存将从堆栈中删除?
亲切的问候,
比约恩
Bjoern,看来您从根本上误解了堆栈和分配的工作原理。阅读有关他们的信息。
你问的是不可能的,因为当你从分配它的函数返回时,由 alloca 分配的内存被“释放”(与帕特里克说的不同,内联cannot改变其行为)。我写“freed”是因为它实际上并没有被释放,它只是像任何其他堆栈变量一样超出了范围。因此之后使用它会导致未定义的行为。
假设你分配了一块内存YourAllocator::allocate
这是从调用的d.push_back()
:
deque<int, AllocaAllocator> d;
d.push_back(42); // calls alloca
printf("Hello\n");
printf("%d\n", d[0]);
alloca 分配的内存可能会被堆栈帧覆盖push_back
and printf
,所以输出可能不是 42,它可能会崩溃,或者任何其他情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)