首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >由于C的限制,Postgres是否使用内存上下文?

由于C的限制,Postgres是否使用内存上下文?
EN

Stack Overflow用户
提问于 2019-12-10 01:17:14
回答 1查看 388关注 0票数 2

Postgres使用内存上下文来管理其内存。

我认为这样做的一个好处是将所有内存分配划分为不同的上下文,这样就可以大量释放上下文中的分配。然而,在C++中,我从未遇到过类似的概念。是因为在C++中有智能指针,因此不需要这样的上下文吗?如果Postgres是用C++开发的,它会使用智能指针而不是内存上下文吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-10 01:31:35

C++智能指针没有提供这样的好处,因为它们仍然从根本上执行单个释放(分配n个项,执行n个释放),而这里的内存上下文允许批量去分配(分配n个项,执行1个去分配)。

这种减少的分配成本(通常与执行分配的开销减少相结合)是基于区域的内存管理 (此策略的通用术语)的全部要点。

C++代码可以使用此策略,例如,使用一个自定义分配器,该分配器包含批量分配,每个子分配的删除器将减少引用计数,当计数降至零时批量分配将大量释放,但安全地执行此策略很困难,特别是如果指针可能无意中引用数据;C更容易,因为所有这些指针都是显式的,因此确定何时应该发生构造函数/析构函数(它们不存在)没有问题,等等。

本质上,这是在非常具体的上下文中使用的一种技巧,在这种情况下,所涉及的所有指针要么是分配给它们的区域的内部指针,要么不涉及基于区域的管理。并且试图将其扩展到现代C++风格的智能指针和分配器,引入了智能指针试图避免的相同的复杂性,因此通常不值得操心。

重点是,没有什么能阻止C++这样做,但是很少需要它(通常只在超高性能的低级别代码中),所以大多数C++代码都不会麻烦。如果您正在编写真正需要此功能的C++代码,那么它很有可能受益于使用更直接的控制进行手工调优,从而导致您用C编写特定组件。

C++确实稍微减少了对这种策略的需求,因为智能指针(很大程度上)消除了失败的风险(正如Postgres博士所指出的,它的一个优点是它比每块簿记更“可靠”,这表明它降低了泄漏的风险),所以C受益更多,但是C和C++都受益于减少的开销(没有每个分配分配器内存开销,没有为每次分配支付降低分配成本),因此C++可以从基于区域的管理中获益。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59258856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档