问题标签 [boost-flyweight]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
372 浏览

c++ - 具有 Boost 和外部数据源的享元

也许有一个我没有看到的简单方法,所以希望有人可以向我解释。

假设我有一堂课:

该类的生成器是:

我想用它boost::flyweight来处理这些A对象,因为可能会有数百万个对它们的引用,实际上它们包含大量数据。它们将被散列name在一起fileName

我需要什么才能完成这项工作?我需要boost::flyweight调用AReader.readObject和散列/存储结果A类。

是否AReader需要成为完整的工厂并用作定制工厂?或者是否可以在享元中使用默认工厂并以某种方式使用AReader来生成A实例(而不是实现工厂所需的整个存储模式),也许可以通过使AReader实例成为享元中某些东西的参数?或者是否可以const从外部数据源获取公共变量(即一旦设置,它们就不会改变)而不求助于第二类?

编辑

我也愿意接受其他不使用 Boost 的建议。我当然可以编写自己的轻量级实现,或者如果有更适合的任何其他模式。但是,如果我可以使用已经存在的东西,那将是最好的。无论什么都能最大限度地减少我需要编写的代码量,因为与往常一样,截止日期很短。

0 投票
1 回答
945 浏览

c++ - boost::flyweight 是否进行引用计数?

我一直在阅读文档,boost::flyweight但我没有看到任何提及释放或引用计数策略的内容。基本上,享元对象的行为应该类似于不同值的存储库,但不清楚不再使用不同值时会发生什么。

是否已经支持?可以通过一些自定义工厂启用吗?

0 投票
2 回答
555 浏览

c++ - 有没有办法获取有关 boost::flyweight 内部容器的信息?

使用 boost::flyweight 应该可以帮助我节省内存。我正在寻找对解决方案的有效性进行定量测量的方法。

有没有办法获取内部容器的 size() ?如果它是基于散列的享元,有没有办法获取有关存储桶状态的信息?哈希冲突等?

任何指针将不胜感激。

0 投票
1 回答
391 浏览

c++ - 增强蝇量级恐慌

我正在使用 Boost 1.39。我已经使用boost::flyweight<no_locking, hashed_factory<> >(我的应用程序是单线程的)实现了我的类。我班级的测试程序顺利通过,但是当我在应用程序中使用时,我很恐慌

请注意,在第 9 帧中,这是 0x0

我不确定我的代码如何使用 boost::flyweight 导致引用计数问题。毕竟,我的接口只包含添加享元对象和销毁它们的方法。

我不知道如何解决这个问题。有任何想法吗?

0 投票
1 回答
607 浏览

boost - 将 Boost 享元与共享内存一起使用

我想在共享内存中保留大量(经常重复的)字符串,所以我使用了 Boost 的享元和进程间 basic_string 功能。为了确保字符串实际存储在共享内存中,我需要在享元使用的 hashed_factory 中提供自定义分配器。

但是,当我将自定义分配器指定给 hashed_factory 时,它无法编译(g++ 4.2.1)......可能是因为它需要一个额外的参数来指定段管理器。使这个工作的语法是什么,或者有更好的方法来做到这一点?

TODO 注释之后的行是有问题的行,注释版本是那些工作但不使用正确分配器的版本。

0 投票
1 回答
206 浏览

c++ - boost::flyweight 不适用于课堂

首先我使用享元作为字符串,它工作正常,但是当我使用享元作为结构时。它不起作用。字符串的第一个测试用例是:

然后我定义了一个结构A,A中的一些属性我使用了flyweight。testcase2如下:

但无论我是否在A中使用flyweight,它对使用的内存都没有任何变化。

0 投票
1 回答
1181 浏览

c++ - 为短弦提升轻量级

我正在实现一个存储和操作大量重复短字符串的系统。例如股票价格系列。我会有很多微软股票价格的重复条目:

我正在考虑使用Boost::Flyweight这些小的重复代码名称(如本例中的 MSFT)来优化内存分配、字符串查找/比较/复制成本。

但问题是这些字符串一开始就很小——通常只有几个字节。而现代计算机中的长类型已经是 8 个字节。Boost::Flyweight在这种情况下值得使用吗?

我的理解Boost::Flyweight是它内部化的字符串是整数以提高性能。但我认为查找/比较/复制 8 字节字符串与操作 8 字节长数据类型并没有太大区别。那么,是否值得搬家Boost::Flyweight

如果我必须选择一个,我的主要目标更多是在速度优化方面而不是内存优化方面。

0 投票
1 回答
205 浏览

c++ - 如何使用 boost::flyweight 作为 GOF 模式?

我不明白如何boost::flyweight用作 GOF 模式。某处是否存在示例?

例如,我希望它以下列方式使用。必须有一些轻量级容器,其中包含“胖”对象。这个容器可以为某些对象提供一些轻量级的“持有者/描述符”。我可以将描述符存储在某个容器中。

我不明白如何从boost::flyweight.

0 投票
0 回答
38 浏览

c++ - Boost.flyweight 访问底层工厂

boost::flyweight<std::string>在整个程序中都使用并想编写一个特定的组件来访问为这些享元字符串提供服务的静态工厂手动insertdelete. 我在文档中看到的用于访问内部结构的最接近的事情是指定自定义跟踪策略,但这只会在销毁享元时调用。有没有办法访问特定 boost::flyweight 实例化的工厂?我想按照设计没有,因为如果我们在工厂操作,我们也需要访问内部锁。

我的另一个想法是定义一个自定义静态持有者并使用正确的类型对其进行实例化以访问静态工厂,但库实例化持有者的类型也没有公开。有任何想法吗?或者提供该级别控制的任何替代库?