std::分配器释放部分内存
std::allocator deallocate part of memory
我正在阅读有关 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 内存分配器功能(malloc
和 free
)无法做到这一点,1 并且C++委员会希望可以在 C 库之上实现C++库。
1 是的,realloc
可以做一些这种情况,但不是全部
相关文章:
- 基于浅树的数据结构的内存分配器,用于频繁分配和解除分配
- 使用 AMD 的 Vulkan 内存分配器时出现链接器错误 (LNK2005)
- 自定义内存分配器示例(需要一些说明)
- 跨共享/静态库集成C++自定义内存分配器
- 带有realloc的自定义池内存分配器
- 正在重写MSVC++中的内存分配器
- 如何使用 CUDA 推力执行策略覆盖推力的低级设备内存分配器
- STL映射的自定义内存分配器
- 是否有自定义内存分配器设计模式不在其分配中存储元数据
- C++内存分配器和多态类型
- 具有自定义指针类型的内存分配器
- 符合 STL 标准的内存分配器库
- 内存分配器作用域的设计
- C++内存分配器体系结构
- 如何评价自定义内存分配器的质量
- 匿名段上的进程间内存分配器
- 处理使用boost::进程间STL兼容共享内存分配器创建的c++对象的正确方法是什么?
- c++内存分配器vptr/new实现
- 自定义内存分配器:T*指针,运算符new与void指针强制转换
- 是否有用于多线程内存分配器的验证套件