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替 ...
随机推荐
- Sublime Text 3 破解+ 汉化包
破解: 第一步:打开主文件搜索十六进制F7D81AC02005 修改1AC0为B001 第二步:搜索 F3FF8BC7E895 修改其中的8BC7为33C0 第三步:过阻拦未注册提示 搜索 0F859 ...
- JS生成某个范围的随机数(四种情况)
前言: JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random() 这个函数可以生成 [0,1) 的一个随机数. 利用它,我们就可以生成指定范围内的随机数. 而涉 ...
- UVa 11437:Triangle Fun(计算几何综合应用,求直线交点,向量运算,求三角形面积)
Problem ATriangle Fun Input: Standard Input Output: Standard Output In the picture below you can see ...
- mac平台下面nodejs环境搭配
方法一(pkg方式:下载链接http://nodejs.org/dist/v0.12.4/node-v0.12.4.pkg): 官网:https://nodejs.org/download/ 例子: ...
- Mac OS X 上的安装haskell开发环境
到haskell官方下载haskell的工具包: https://downloads.haskell.org/~platform/2014.2.0.0/Haskell%20Platform%20201 ...
- 在getView方法产生给用户item的视图以及数据
在getView方法产生给用户item的视图以及数据
- 如何开启SQL Server 2008的远程联机
需要开启SQL Server 2008 远程联机,需按如下操作步骤执行: 1.首先需要在{程序}-{Microsoft SQL Server 2008}-{配置工具}-{SQL Server 配置管理 ...
- su和su - 的区别
Linux中切换用户的命令是su或su -.前天我在使用useradd这个命令时,才体会到这两者的本质区别.如图: 我首先是用su命令切换到root身份的,但是运行useradd时,出现错误:bash ...
- vs 数据库链接Web.config 配置
1.使用Windows身份验证 <add name="SQLConnectionString" connectionString="Data Source=U5MJ ...
- spring实战二之Bean的自动装配(非注解方式)
Bean的自动装配 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bea ...