速度测试代码:

#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速度测试的更多相关文章

  1. iOS5系统API和5个开源库的JSON解析速度测试

    iOS5系统API和5个开源库的JSON解析速度测试 iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件. 我们选择的测试对 ...

  2. TF卡速度测试对比 Class数越高速度越快

    存储卡(TF卡)是手机扩展存储的大杀器,让你多装n部学习资料,多装n个外语听力练习.除了装东西外,存储卡性能不佳也会影响手机的整体性能以及体验的.本文主要针对Android手机,我是懒人,但我讨厌懒人 ...

  3. C++ strcpy strcpy_s strncpy strlcpy

    strncpy的用法:它与strcpy的不同之处就在于复制n个字符,而不是把所有字符拷贝(包括结尾'\0'). 函数原型:char * strncpy(char *dst,const char * s ...

  4. 手机闪存速度测试工具,AndroBench

    手机闪存速度测试工具,AndroBench

  5. VPS性能测试(3):磁盘IO读写速度、SSD硬盘速度测试

    1.磁盘IO,即输入/输出(Input/Output),这是测试磁盘性能一个重要指标,一些便宜的VPS主机为了降低成本,以大量的低性能的硬盘来充当服务器,导致VPS主机因为IO差而拖了整个主机性能的后 ...

  6. 在线HTTP速度测试(响应时间测试)及浏览器兼容测试

    一.前言 网站的响应时间,是判断一个网站是否是好网站的重要的因素之一.百度首页的响应时间在全国各个省份小于10ms.这个响应时间远远好于竞争对手.根据美丽说的技术负责人分析,美丽说访问速度提升10%, ...

  7. Linux硬盘速度测试的命令

    测试下硬盘的读写速度如何,在linux下可以使用hdparm 对硬盘进行测试或查看硬盘的相关信息. hdparm 命令进行硬盘速度测试.参数: -a 表示是否关闭磁盘预读取功能.对于大文件读取,这个显 ...

  8. VPS速度测试(4):上传下载速度、服务器带宽、Ping响应时间

    1.VPS的速度好坏经常是我们选择某一个VPS商家的重要参考指标,对于国外的VPS主机我们可以执行以下命令来测试VPS入口带宽是多少. wget https://cachefly.cachefly.n ...

  9. C语言中函数strcpy ,strncpy ,strlcpy的用法【转】

    转自:http://blog.chinaunix.net/uid-20797562-id-99311.html strcpy ,strncpy ,strlcpy的用法好多人已经知道利用strncpy替 ...

随机推荐

  1. javaScript中利用ActiveXObject来创建FileSystemObject操作文件

    注:如果用javascript读本地文件,遇到安全问题. 需在浏览器中进行设置,如下:     工具—> Internet选项->安全->自定义级别->启用“没有标识为安全的A ...

  2. 设计模式学习之原型模式(Prototype,创建型模式)(5)

    通过序列化的方式实现深拷贝 [Serializable] public class Person:ICloneable { public string Name { get; set; } publi ...

  3. .net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串

    1.继承(1)创建子类对象的时候,在子类对象中会为子类对象的字段开辟空间,也会为父类的所有字段开辟空间,只不过父类私有的成员访问不到(2)子类从父类继承父类所有的非私有成员,但是父类的所有字段也会创建 ...

  4. Java Hour 48 Servlet 简介

    搞Java Web 开发,绕不开的就是Servlet 了.传说Servlet 是一种比JSP 更加古董的动态网页编程技术.在没有JSP 之前,Servlet 同时充当了展现层,业务逻辑层和持久层. 这 ...

  5. PHP GBK UTF8互转

    function gbk_to_utf8($str){     return mb_convert_encoding($str, 'utf-8', 'gbk'); }   function utf8_ ...

  6. 建模算法(九)——拟合

    一.线性最小二乘法 1.基本思路 令,其r(x)是事先选定的一组线性无关的函数.ak是待定系数.然后拟合的准则就是使得yi与f(xi)的距离的平方和最小,称之为最小二乘准则 2.系数的确定 ,要使距离 ...

  7. 浅谈c++ new and delete or new [] and delete []

    http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问 ...

  8. 如何写出安全的API接口

    通过园友们的讨论,以及我自己查了些资料,然后对接口安全做一个相对完善的总结,承诺给大家写个demo,今天一并放出. 对于安全也是相对的,下面我来根据安全级别分析 1.完全开放的接口 有没有这样的接口, ...

  9. HBase伪分布式环境下,HBase的API操作,遇到的问题

    在hadoop2.5.2伪分布式上,安装了hbase1.0.1.1的伪分布式 利用HBase的API创建个testapi的表时,提示  Exception in thread "main&q ...

  10. Spring的属性编辑器

    bean类 import java.util.Date; public class Bean { private Date date; public Date getDate() { return d ...