c – 使用公共部分压缩字符串
我有一个管理大量字符串的应用程序.字符串采用类似路径的格式,并且有许多共同的部分,但没有明确的规则.它们不是文件系统上的路径,但可以这样考虑.
我显然需要优化内存消耗,但不会造成很大的性能损失. 我正在考虑两种选择: 这个问题看起来很常见,我想知道什么是最好的解决方案,或者有人知道一个针对这个问题的库. 谢谢 解决方法
从某种意义上说,它们是表单名称的层次结构中的定位符,(分隔符,名称)*?如果是这样,您可以使用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 *>. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |