std :: allocator释放内存的一部分

时间:2016-04-25 21:08:15

标签: c++ c++11 c++14

我正在阅读有关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;
}

1 个答案:

答案 0 :(得分:2)

有些分配器可能会这样做。 C ++规范只说明了抽象分配器接口Alloc<T>所有实现必需要执行的操作。委员会决定不要求你提出要求的功能。

我在这台计算机上没有C ++原理,但我怀疑你要求的功能不是必需的,因为C内存分配器功能(mallocfree)不能做到了, 1 并且C ++委员会希望能够在C库之上实现C ++库。

1 是的,realloc可以做某些情况,但不是全部