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替 ...
随机推荐
- document.createElement
document.createElement()的用法 document.createElement()是在对象中创建一个对象,要与appendChild() 或 insertBefore()方法联合 ...
- 安装绿色版mysql
#修改my.ini basedir = "D:\tools\mysql-5.7.13-winx64" datadir = "D:\tools\mysql-5.7.13-w ...
- 一、HTML和CSS基础--HTML+CSS基础课程--第4部分
第七章 CSS的继承.层叠和特殊性 继承:CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代. 特殊性 权值的规则: 标签 ...
- unix PS命令和JPS命令的区别
1.JPS介绍 用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java ...
- Codeigniter CRUD代码快速构建
一个与数据库操作打交道的应用,必然涉及到数据的添加.修改.删除等操作.因此CRUD操作几乎成为每个后台管理站点的必备功能.数据库的复杂性,导致PHP操作代码也会有不少的冗余,因此,如果可以有工具自动生 ...
- Java Hour 16 来个CURD吧!
有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 突然想到我最近一直在追的小说,作者每天都会更新两章,而且质量挺高.所以从这篇开 ...
- vijos 1028 LIS *
链接:点我 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...
- Enter直接登录
2.2 按Enter键调用登录按钮 [实例描述] 为了方便用户操作,在登录邮箱或论坛时,如果用户输入了用户名和密码,按Enter键时,都会自动调用登录按钮.本例学习如何实现此功能. [实现代码] & ...
- Linux常用命令_(进程管理)
进程管理:ps.top.kill 指令名称:ps语法:ps [选项]-a显示所有终端机下执行的程序.-e显示所有程序.-f显示UID,PPIP,C与STIME栏位.功能描述:查看系统中运行的进程.范例 ...
- Android 编程下 App Install Location
从 API 8 开始(参考官方文档:App Install Location | Android Developers),你可以将你的应用安装在外部储存中(例如,安装到设备的 SD 卡上).这是一个可 ...