C ++ 1y的内存管理中的定型释放功能

曼托什·库马尔

已建议在C ++ 1y中包括大小调整分配功能。但是我想了解它如何影响/改善当前的c ++低级内存管理

N3778中有此建议,其意图如下。

使用C ++ 11时,程序员可以定义一个静态成员函数运算符delete,该运算符带有一个size参数,该参数指示要删除的对象的大小。等效的全局运算符删除不可用。这种遗漏会带来不幸的性能后果。

现代内存分配器通常按大小类别进行分配,并且出于节省空间的原因,它们不将对象的大小存储在对象附近。然后,解除分配要求搜索包含对象的尺寸类别存储。这种搜索可能会很昂贵,特别是因为搜索数据结构通常不在内存缓存中。解决方案是允许实现和程序员定义全局运算符delete的大小版本当大小版本可用时,编译器应优先调用大小版本,而不是未大小版本。

从上面的段落来看,似乎可以保留操作员删除所需的大小信息,并因此由使用的程序传递。这样可以避免在释放时搜索大小。但是据我了解,内存管理在分配时将大小信息存储在某种报头中(dlmalloc中的解释性边界标签方法),该信息将在释放时使用。

T* p = new T();
// Now size information would be stored in the header
// *(char*)(p - 0x4) = size;
// This would be used when we delete the memory????.
delete p;

如果在头文件中存储了大小信息,为什么需要重新分配呢?看来我缺少明显的东西,并且没有完全理解这个概念。

另外,在处理C ++中的低级内存管理时如何在程序中使用此功能。希望有人能帮助我理解这些概念。

曼卡瑟

如您的报价:

[现代内存分配器]出于节省空间的原因,请勿将对象的大小存储在对象附近。

为了添加显式的大小信息,增加每个分配的大小显然会比其他选择(例如,每个分配池存储一次大小信息或在释放时提供信息)使用更多的内存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ 1y中的内存管理中的大小调整分配功能

来自分类Dev

C ++ 1y自动功能类型推导

来自分类Dev

在qt(mingw)中启用c ++ 1y

来自分类Dev

释放C中的内存

来自分类Dev

了解有关C ++ 1y的提案N3650中有关可恢复功能的示例

来自分类Dev

在C ++ 11或C ++ 1y中对非类型模板参数包进行排序?

来自分类Dev

无法在C中释放内存

来自分类Dev

无法在C中释放内存

来自分类Dev

在C ++ 1y中是否需要公共的类typedef?

来自分类Dev

C ++:元组列表C ++ 11 / 1y

来自分类Dev

C ++ 1y / 14:自动变量模板?

来自分类Dev

返回类型推导的类方法?C ++ 1y

来自分类Dev

CRTP和c ++ 1y返回类型推导

来自分类Dev

在C中需要释放内存吗?

来自分类Dev

如何从C中的char数组释放内存

来自分类Dev

释放C中内存的正确方法

来自分类Dev

在C中循环分配和释放内存

来自分类Dev

链接列表和C中的释放内存

来自分类Dev

释放C中动态分配的内存

来自分类Dev

在C的递归子程序中释放内存

来自分类Dev

关于C ++中的内存释放的困惑

来自分类Dev

释放C ++中的非动态内存

来自分类Dev

在C中需要释放内存吗?

来自分类Dev

在C中释放内存不起作用

来自分类Dev

在C ++中终止进程并释放内存

来自分类Dev

在C中释放已分配的内存

来自分类Dev

如何释放内存到C中的指针

来自分类Dev

用C编写内存管理功能?

来自分类Dev

C ++中的内存管理错误