C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 使用公共部分压缩字符串大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个管理大量字符串的应用程序.字符串采用类似路径的格式,并且有许多共同的部分,但没有明确的规则.它们不是文件系统上的路径,但可以这样虑.
我显然需要优化内存消耗,但不会造成很大的性能损失.

我正在虑两种选择:
– 实现一个压缩存储数据的compressed_String类,但我需要一个固定的字典,我现在无法找到一个库.我不希望霍夫曼在字节上,我希望它在单词上.
– 在字符串部分上实现某种flyweight模式.

这个问题看起来很常见,我想知道什么是最好的解决方案,或者有人知道一个针对这个问题的库.

谢谢

解决方法

某种意义上说,它们是表单名称的层次结构中的定位符,(分隔符,名称)*?如果是这样,您可以使用interning:将名称部分存储为指向字符串池的char const *元素.这样,您可以有效地压缩使用N次的名称,使其超过n * sizeof(char const *)strlen(Name)字节.完整路径将成为一系列实习名称,例如一个std :: vector.

看起来sizeof(char const *)在64位硬件上很大,但你也节省了一些分配开销.或者,如果您因某种原因知道您将永远不需要超过65536个字符串,则可以将它们存储为

class interned_name
{
    uint16_t tab_idx;

  public:
    char const *c_str() const
    {
        return NAME_TABLE[tab_idx];
    }
};

其中NAME_TABLE是静态std :: unordered_map< uint16_t,char const *>.

大佬总结

以上是大佬教程为你收集整理的c – 使用公共部分压缩字符串全部内容,希望文章能够帮你解决c – 使用公共部分压缩字符串所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。