string insert 的性能分析
有这样一个网络传输包。
前端有个固定的包头,包含了后面传输body的长度信息。
#include <string>
#include <stdio.h>
#include "Utility.h"
int load_file(const char* filename, char** content, size_t* content_len)
{
FILE* fp = fopen(filename, "r");
if (!fp)
{
return -;
}
fseek(fp, , SEEK_END);
size_t len = ftell(fp);
rewind(fp);
char* buf = (char*)malloc(len + );
if (!buf)
{
return -;
}
fread(buf, sizeof(char), len, fp);
buf[len] = '\0';
fclose(fp);
*content = buf;
*content_len = len;
return ;
} int main(int argc, const char *argv[])
{
char* content;
const char* file_name = argv[];
uint32_t space = atoi(argv[]);
uint32_t insert = atoi(argv[]);
size_t len = ;
if (load_file(file_name, &content, &len) < )
{
printf("load %s failed\n", file_name);
return -;
}
std::string raw_content(content, len);
for (int i = ; i < space - ; i++)
{
raw_content.append(content, len);
}
char size_str[];
snprintf(size_str, sizeof(size_str), "%u\t%u",
insert, raw_content.size());
std::string final_content("cooooooo%dddd$%DDD123r423");
{
TimeEval timer(size_str);
if(insert == )
{
raw_content.insert(, final_content);
} if (insert == )
{
final_content.append(raw_content);
}
if (insert == )
{
char* buf = (char*)malloc(final_content.size() + raw_content.size() + );
memcpy(buf, final_content.c_str(), final_content.size());
memcpy(buf + final_content.size(), raw_content.c_str(), raw_content.size());
free(buf);
}
}
return ;
}
性能测试显示

可以看到在insert移动文本长度在k 级别以上时,其效率较拷贝的效率高得多。
由于涉及到内存分配,方案3的效率最低。
方案1 和方案2 的性能差别应该以上由于方案二分配了大量的(标红处)内存空间,gcc的代码如下

string insert 的性能分析的更多相关文章
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack). Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Ja ...
- Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- MyBatisPlus性能分析插件,条件构造器,代码自动生成器详解
性能分析插件 我们在平时的开发中,会遇到一些慢sql,测试,druid MP(MyBatisPlus)也提供性能分析插件,如果超过这个时间就停止 不过官方在3.2版本的时候取消了,原因如下 条件构造器 ...
- SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)
前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...
- SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)
前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能,简短的内容,深入的理解,Always to review the basics. ...
- SQL Server-聚焦EXISTS AND IN性能分析(十六)
前言 前面我们学习了NOT EXISTS和NOT IN的比较,当然少不了EXISTS和IN的比较,所以本节我们来学习EXISTS和IN的比较,简短的内容,深入的理解,Always to review ...
- SQL Server-聚焦INNER JOIN AND IN性能分析(十四)
前言 本节我们来讲讲联接综合知识,我们在大多教程或理论书上都在讲用哪好,哪个性能不如哪个的性能,但是真正讲到问题的实质却不是太多,所以才有了本系列每一篇的篇幅不是太多,但是肯定是我用心去查找许多资料而 ...
- 性能分析神器VisualVM
VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回 ...
- MySQL性能分析及explain的使用
MySQL性能分析及explain用法的知识 1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id selectty ...
随机推荐
- android源码编译1
一.环境说明: 1.liunx系统:Ubuntu12.04 2.jdk:sun-java6-jdk 3.g++4.5 gcc4.5 二.android源码的目录结构 |-- Makefile |-- ...
- 用paint 计算字符串的像素宽度
方法1: //直接返回参数字符串所占用的像素宽度 Paint paint = new Paint(); width = paint.measureText(str); 有一些view可以直接得到pai ...
- git push
使用git push直接推送未关联分支的时候,出现如下提示: $ git push Counting objects: 46, done. Delta compression using up to ...
- Hadoop1.x与Hadoop2的区别
转自:http://blog.csdn.net/fenglibing/article/details/32916445 六.Hadoop1.x与Hadoop2的区别 1.变更介绍 Hadoop2相比较 ...
- POJ 3233 矩阵乘法
题意:求解A+A^2+...+A^k 题解: 1)利用通和公式,原式=(A^k+1 - A)(A - O)^-1 时间复杂度O(n^3lgk) 2)递归求解,A+A^2+...+A^k=(A+A^2+ ...
- 各浏览器各版本User-agent汇总 欢迎补充
Internet Explorer Internet Explorer 5 Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; WOW64; Trident/ ...
- BZOJ_1025_[SHOI2009]_游戏_(素数表+最小公倍数+DP)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1025 分析 对于\(n\),转一圈回来之后其实是好几个环各转了整数圈.这些环中的数为\(1,2 ...
- shape的属性(二)
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="r ...
- Androidstudio下Generate signed apk提示Error: Expected resource of type id [ResourceType]解决办法
只需要在报错位置所在的类上面添加: @SuppressWarnings("ResourceType") 即可实现Generate signed apk.
- mysql SQL_MODE设置
1.1. SQL_MODE设置 在生产环境中强烈建议将这个值设置为严格模式,这样有些问题可以在数据库的设计和开发阶段就能实现,而如果在生产环境下运行数据库后发现这类问题,那么修改的代价将变得十分巨 ...