我正在阅读有关 C++ 分配器和 deallocate 的内容函数中有一句话引起了我的注意:
参数 n 必须等于最初生成 p 的 allocate() 调用的第一个参数;否则,行为未定义。
这是为什么呢?为什么不能释放部分已分配的内存,愚蠢的例子:
#include <memory>
#include <string>
int main()
{
std::allocator<std::string> alloc;
auto const p = alloc.allocate(20);
alloc.deallocate(p+10, 10);
return 0;
}
最佳答案
一些分配器也许能够做到这一点。 C++ 规范仅说明了抽象分配器接口(interface) Alloc<T>
的所有实现。 ,是需要去做的。委员会决定不需要您所询问的功能。
我在这台计算机上没有 C++ 原理,但我怀疑您所询问的功能不是必需的,因为 C 内存分配器函数( malloc
和 free
)无法做到这一点, 1 并且 C++ 委员会希望能够在 C 库之上实现 C++ 库。
1 是的,realloc
可以做到某些情况,但不是全部
关于c++ - std::allocator 释放部分内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851112/