snprintf/strncpy/strlcpy速度测试
速度测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/time.h>
#include <sched.h>
#define COUNT 10000000
//#define COUNT 10000000
#define MILLION 1000000L size_t VisCore_Strlcpy(char *dst, const char *src, size_t n)
{
const char *src0 = src;
char dummy[]; if (!n) {
dst = dummy;
}
else {
--n;
} while ((*dst = *src) != ) {
if (n) {
--n;
++dst;
}
++src;
} return src - src0;
} int main(void)
{
int i;
long long tdif;
struct timeval tend, tstart;
char data[];
char *buf1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
"aaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"; char *buf = "aaaaaaaaaaaaaaaaaaaaaaaa"; if (gettimeofday(&tstart, NULL) == -) {
fprintf(stderr, "Failed to get start time\n");
return ;
}
#if 1
for (i = ; i < COUNT; i++) {
//snprintf(data, sizeof(data), "%s", buf);
//snprintf(data, sizeof(data), "%s", buf);
//strlcpy(data, buf, sizeof(data));
VisCore_Strlcpy(data, buf, sizeof(data));
//strncpy(data, buf, sizeof(data));
}
#endif
if (gettimeofday(&tend, NULL) == -) {
fprintf(stderr, "Failed to get end time\n");
return ;
}
tdif = MILLION * (tend.tv_sec - tstart.tv_sec) + (tend.tv_usec - tstart.tv_usec);
//printf("nanosleep() time is %lld us\n", tdif);
printf("nanosleep() time is %f us\n", tdif*1.0/COUNT);
//printf("nanosleep() time is %lld us\n", tdif/COUNT);
return ;
}
在hi3520a中的测试速度结果:
| 源、目标长度大小 相关函数 |
dst:24 src:678 | dst:680 src:678 | dst:1024 src:678 | dst:1024 src:24 |
| strncpy(us) O2 优化 | 0.037871 | 2.408301 | 3.155248 | 2.264491 |
| snprintf(us) O2 优化 | 3.061944 | 3.320676 | 3.311918 | 1.46123 |
| strlcpy(us) O2 优化 | 3.681469 | 3.681542 | 3.681374 | 0.174848 |
| VisCore_Strlcpy(us) O2 优化 | 2.934305 | 2.571704 | 2.57172 | 0.108673 |
| 源、目标长度大小 相关函数 |
dst:24 src:678 | dst:680 src:678 | dst:1024 src:678 | dst:1024 src:24 |
| strncpy(us) O2 优化 | 0.037871 | 2.408301 | 3.155248 | 2.264491 |
| snprintf(us) O2 优化 | 3.061944 | 3.320676 | 3.311918 | 1.46123 |
| strlcpy(us) O2 优化 | 3.681469 | 3.681542 | 3.681374 | 0.174848 |
| VisCore_Strlcpy(us) O2 优化 | 2.934305 | 2.571704 | 2.57172 | 0.108673 |
| strlcpy(us) Os 优化 | 3.684127 | 3.684136 | 3.68421 | 0.165779 |
| VisCore_Strlcpy(us) Os 优化 | 3.678672 | 3.678688 | 3.678671 | 0.185096 |
| VisCore_Strlcpy(us) O0 默认 | 16.902501 | 18.300108 | 18.302474 | 0.710118 |
参考博文:
[原创]snprintf与strncpy效率对比
aa
snprintf/strncpy/strlcpy速度测试的更多相关文章
- iOS5系统API和5个开源库的JSON解析速度测试
iOS5系统API和5个开源库的JSON解析速度测试 iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件. 我们选择的测试对 ...
- TF卡速度测试对比 Class数越高速度越快
存储卡(TF卡)是手机扩展存储的大杀器,让你多装n部学习资料,多装n个外语听力练习.除了装东西外,存储卡性能不佳也会影响手机的整体性能以及体验的.本文主要针对Android手机,我是懒人,但我讨厌懒人 ...
- C++ strcpy strcpy_s strncpy strlcpy
strncpy的用法:它与strcpy的不同之处就在于复制n个字符,而不是把所有字符拷贝(包括结尾'\0'). 函数原型:char * strncpy(char *dst,const char * s ...
- 手机闪存速度测试工具,AndroBench
手机闪存速度测试工具,AndroBench
- VPS性能测试(3):磁盘IO读写速度、SSD硬盘速度测试
1.磁盘IO,即输入/输出(Input/Output),这是测试磁盘性能一个重要指标,一些便宜的VPS主机为了降低成本,以大量的低性能的硬盘来充当服务器,导致VPS主机因为IO差而拖了整个主机性能的后 ...
- 在线HTTP速度测试(响应时间测试)及浏览器兼容测试
一.前言 网站的响应时间,是判断一个网站是否是好网站的重要的因素之一.百度首页的响应时间在全国各个省份小于10ms.这个响应时间远远好于竞争对手.根据美丽说的技术负责人分析,美丽说访问速度提升10%, ...
- Linux硬盘速度测试的命令
测试下硬盘的读写速度如何,在linux下可以使用hdparm 对硬盘进行测试或查看硬盘的相关信息. hdparm 命令进行硬盘速度测试.参数: -a 表示是否关闭磁盘预读取功能.对于大文件读取,这个显 ...
- VPS速度测试(4):上传下载速度、服务器带宽、Ping响应时间
1.VPS的速度好坏经常是我们选择某一个VPS商家的重要参考指标,对于国外的VPS主机我们可以执行以下命令来测试VPS入口带宽是多少. wget https://cachefly.cachefly.n ...
- C语言中函数strcpy ,strncpy ,strlcpy的用法【转】
转自:http://blog.chinaunix.net/uid-20797562-id-99311.html strcpy ,strncpy ,strlcpy的用法好多人已经知道利用strncpy替 ...
随机推荐
- thinkphp的mvc理解
ThinkPHP支持多层设计. .模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层等不同的模型层可以在模块目录下创建Model,L ...
- C与C++的细微区别——省略形式参数名
转自:http://www.cppblog.com/ownwaterloo/archive/2009/04/26/omit_parameter_name.html 一.C与C++的细微区别 在函数声明 ...
- HTML <img> 标签的 height 和 width 属性
定义和用法 <img> 标签的 height 和 width 属性设置图像的尺寸. 提示:为图像指定 height 和 width 属性是一个好习惯.如果设置了这些属性,就可以在页面加载时 ...
- 从数据库得到的结果集存放到List集合中
一.业务阐述 在开发中查询的数据库结果集,既要连接数据库.执行数据库操作.关闭数据库,还要把结果集的记录人为的设置到自己封装的DAO中等一系列的重复代码. 本文主要是想解决:用户只需要得到数据库连接, ...
- TextView属性大全
今天研究了TextView一天了,发现网上有一篇讲TextView属性的,非常全,收藏一下先. 发现TextView有一个比较大的问题,就是文字排版的问题,遇到数字,字母,符号等就会有问题,目前还没有 ...
- C# PropertyGrid控件应用心得
何处使用 PropertyGrid 控件 在应用程序中的很多地方,您都可以使用户与 PropertyGrid 进行交互,从而获得更丰富的编辑体验.例如,某个应用程序包含多个用户可以设置的“设置”或选项 ...
- Eval有什么功能?
它的功能是把对应的字符串解析成JS代码并运行.应该尽量避免使用eval,因为不安全,非常耗性能.解析成JS代码要耗能,执行时也要耗能.
- http://blog.csdn.net/congcong68/article/details/39252897
http://blog.csdn.net/congcong68/article/details/39252897
- 简单几何(直线与圆的交点) ZOJ Collision 3728
题目传送门 题意:有两个一大一小的同心圆,圆心在原点,大圆外有一小圆,其圆心有一个速度(vx, vy),如果碰到了小圆会反弹,问该圆在大圆内运动的时间 分析:将圆外的小圆看成一个点,判断该直线与同心圆 ...
- Redis作为多个Windows服务运行配置方法
1.首先下载微软官方推荐的版本redis-2.8.12 2.开始配置,首先复制两份redis.conf并且重命名为redis6379.conf redis6380.conf 里面的配置节点相应的更改 ...