std::分配器释放部分内存

std::allocator deallocate part of memory

本文关键字:内存 分配器 std 释放部      更新时间:2023-10-16

我正在阅读有关 c++ 分配器的信息,而 deassign 函数有一句话引起了我的注意:

参数 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++规范只说明了抽象分配器接口的所有实现(Alloc<T>)需要做什么。 委员会决定不需要您询问的功能。

我在这台计算机上没有C++的基本原理,但我怀疑您询问的功能不是必需的,因为 C 内存分配器功能(mallocfree )无法做到这一点,1 并且C++委员会希望可以在 C 库之上实现C++库。

1 是的,realloc可以做一些这种情况,但不是全部