c++ - std::allocator 释放部分内存

标签 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;
}

最佳答案

一些分配器也许能够做到这一点。 C++ 规范仅说明了抽象分配器接口(interface) Alloc<T>所有实现。 ,是需要去做的。委员会决定不需要您所询问的功能。

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

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

关于c++ - std::allocator 释放部分内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851112/

相关文章:

c++ - 扩展 std::thread 的 ref 对象传递范围

c++ - [C++14]我正在使用 pair 但没有输出

c++ - VisualStudio Code可以用来调试C++程序吗?

c++ - C++ 中的 "template <typename From, typename Tag> struct Alias;"是什么?

c++ - 如何使用指针调整字符串拆分算法,使其改用迭代器?

c++ - 为什么 emplace_hint 比插入 map 慢?

c++ - 传递临时 std::string 时的 string_view 行为

c++ - libstdc++-6.dll 问题

c++ - std::mutex 初始化异常

c++ - clang std::isspace 编译错误