速度测试代码:

#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. Sublime Text 3 破解+ 汉化包

    破解: 第一步:打开主文件搜索十六进制F7D81AC02005 修改1AC0为B001 第二步:搜索 F3FF8BC7E895 修改其中的8BC7为33C0 第三步:过阻拦未注册提示 搜索 0F859 ...

  2. JS生成某个范围的随机数(四种情况)

    前言: JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random()  这个函数可以生成 [0,1) 的一个随机数. 利用它,我们就可以生成指定范围内的随机数. 而涉 ...

  3. UVa 11437:Triangle Fun(计算几何综合应用,求直线交点,向量运算,求三角形面积)

    Problem ATriangle Fun Input: Standard Input Output: Standard Output In the picture below you can see ...

  4. mac平台下面nodejs环境搭配

    方法一(pkg方式:下载链接http://nodejs.org/dist/v0.12.4/node-v0.12.4.pkg): 官网:https://nodejs.org/download/ 例子: ...

  5. Mac OS X 上的安装haskell开发环境

    到haskell官方下载haskell的工具包: https://downloads.haskell.org/~platform/2014.2.0.0/Haskell%20Platform%20201 ...

  6. 在getView方法产生给用户item的视图以及数据

    在getView方法产生给用户item的视图以及数据

  7. 如何开启SQL Server 2008的远程联机

    需要开启SQL Server 2008 远程联机,需按如下操作步骤执行: 1.首先需要在{程序}-{Microsoft SQL Server 2008}-{配置工具}-{SQL Server 配置管理 ...

  8. su和su - 的区别

    Linux中切换用户的命令是su或su -.前天我在使用useradd这个命令时,才体会到这两者的本质区别.如图: 我首先是用su命令切换到root身份的,但是运行useradd时,出现错误:bash ...

  9. vs 数据库链接Web.config 配置

    1.使用Windows身份验证 <add name="SQLConnectionString" connectionString="Data Source=U5MJ ...

  10. spring实战二之Bean的自动装配(非注解方式)

    Bean的自动装配 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bea ...