Yli*_*sar 17
boost::flyweight< std::string > 似乎正是你正在寻找的.
在C中有类似intern()方法的东西,就像我们在Java中一样吗?
不在标准C库中.
如果没有,如何在C中进行字符串实习?
我很害怕,很困难.第一个问题是"字符串"在C中不是一个明确定义的东西.相反,你char *可能指向一个以零结尾的字符串,或者可能只是表示一个字符位置.然后你就会遇到一些问题,即某些字符串嵌入其他东西......或存储在堆栈中.这两者都使得实习不可能和/或无意义.然后,存在这样的问题:C字符串文字不能保证以Java保证的方式实现.最后,存在的问题是实习是等待发生的存储泄漏......如果语言不是垃圾收集的话.
话虽如此,(尝试)在C中实现实习的方法是创建一个哈希表来保存实习字符串.您需要将它作为一个前提条件,除非它是文本或在其自己的堆节点中分配的字符串,否则不能实习字符串.要解决存储泄漏问题,您需要一个每字符串引用计数来检测何时可以丢弃一个内部字符串.