天下武功,唯快不破:提升字符串格式化效率的小技巧
[導(dǎo)讀]道哥的第025篇原創(chuàng)一、前言二、最簡單的格式化三、測試1:手動格式化數(shù)字四、測試2:混合格式化字符串和數(shù)字五、sprintf的實現(xiàn)機制六、總結(jié)一、前言在嵌入式項目開發(fā)中,字符串格式化是很常見的操作,我們一般都會使用C庫中的sprintf系列函數(shù)來完成格式化。從功能上來說,這是沒有...
- 一、前言
- 二、最簡單的格式化
- 三、測試1:手動格式化數(shù)字
- 四、測試2:混合格式化字符串和數(shù)字
- 五、sprintf 的實現(xiàn)機制
- 六、總結(jié)
一、前言
在嵌入式項目開發(fā)中,字符串格式化是很常見的操作,我們一般都會使用 C 庫中的 sprintf 系列函數(shù)來完成格式化。從功能上來說,這是沒有問題的,但是在一些時間關(guān)鍵場合,字符串的格式化效率會對整個系統(tǒng)產(chǎn)生顯著的影響。例如:在一個日志系統(tǒng)中,吞吐率是一個重要的性能指標。每個功能模塊都產(chǎn)生了大量的日志信息,日志系統(tǒng)需要把時間戳添加到每條日志的頭部,此時字符串的格式化效率就比較關(guān)鍵了。天下武功,唯快不破!這篇文章就專門來聊一聊把數(shù)字格式化成字符串,可以有什么更好的方法。也許技術(shù)含量不高,但是很實用!二、最簡單的格式化
#include #include #include #include
int main(){ char buff[32] = { 0 }; sprintf(buff, "%ld", LONG_MAX); printf("buff = %s \n", buff);}
其中,LONG_MAX 表示 long 型數(shù)值的最大值。代碼在眨眼功夫之間就執(zhí)行結(jié)束了,但是如果是一百萬、一千萬次呢?三、測試1:手動格式化數(shù)字
1. 獲取系統(tǒng)時間戳函數(shù)
我的測試環(huán)境是:在 Win10 中通過 VirtualBox,安裝了 Ubuntu16.04 虛擬機,使用系統(tǒng)自帶的 gcc 編譯器。為了測試代碼執(zhí)行的耗時,我們寫一個簡單的函數(shù):獲取系統(tǒng)的時間戳,通過計算時間差值來看一下代碼的執(zhí)行速度。// 獲取系統(tǒng)時間戳long long getSysTimestamp(){ struct timeval tv; gettimeofday( 




