这是一篇邪术的文章。 不要跟我说安全的问题。C++ 就是一种在安全边缘,疯狂压榨性能的一种语言。
情景
在公司的某一天,突然接手了一个任务,因为公司的某个产品提出了一个**(嗯你懂的)需求,需要导入大量的Json的数据,然后解析Json 数据,拼接成map 进入到缓存池中。
问题
我写了第一个版本,用 C++ Json 库去解析Json 然后解析成一个多维度的map(就是map
改进
我发现代码中 使用了大量的map 插入 和 map的取值。对于每个map,如果都拿出来,然后赋值给一个对象。那么就是消耗了一次拷贝构造。然后你拿着拷贝构造出来的对象,去进行操作,插入回去又是一种消耗。 可是我的对象类型又不一定一样,这个时候:
用地址
当map插入完成后,人后这个map操作是替换为主,那么 你就使用这个邪术好了,
直接将插入后的map中的地址拿出来使用,当然这样灰常不安全。如果这个时候有另外个线程动了你的map,大概率 随机crash。
好处
这样的好处就是, 可以避免大量的拷贝构造,赋值构造,等等等。还可以让函数变的简单 易懂,因为你可以用void 指针扔进去。
例子(后面的文章补)
结果
这个结果导致,1分半 变成了 10s. 当然还有很多技巧能使 C++ 速度变快。
有兴趣 可以往下看。