天下武功,唯快不破:提升字符串格式化效率的小技巧
扫描二维码
随时随地手机看文章
- 一、前言
- 二、最简单的格式化
- 三、测试1:手动格式化数字
- 四、测试2:混合格式化字符串和数字
- 五、sprintf 的实现机制
- 六、总结
一、前言
在嵌入式项目开发中,字符串格式化是很常见的操作,我们一般都会使用 C 库中的 sprintf 系列函数来完成格式化。从功能上来说,这是没有问题的,但是在一些时间关键场合,字符串的格式化效率会对整个系统产生显著的影响。例如:在一个日志系统中,吞吐率是一个重要的性能指标。每个功能模块都产生了大量的日志信息,日志系统需要把时间戳添加到每条日志的头部,此时字符串的格式化效率就比较关键了。天下武功,唯快不破!这篇文章就专门来聊一聊把数字格式化成字符串,可以有什么更好的方法。也许技术含量不高,但是很实用!二、最简单的格式化
#include
#include
#include
#include
int main()
{
char buff[32] = { 0 };
sprintf(buff, "%ld", LONG_MAX);
printf("buff = %s \n", buff);
}
其中,LONG_MAX 表示 long 型数值的最大值。代码在眨眼功夫之间就执行结束了,但是如果是一百万、一千万次呢?三、测试1:手动格式化数字
1. 获取系统时间戳函数
我的测试环境是:在 Win10 中通过 VirtualBox,安装了 Ubuntu16.04 虚拟机,使用系统自带的 gcc 编译器。为了测试代码执行的耗时,我们写一个简单的函数:获取系统的时间戳,通过计算时间差值来看一下代码的执行速度。// 获取系统时间戳
long long getSysTimestamp()
{
struct timeval tv;
gettimeofday(