मैंने एक दिलचस्प प्रदर्शन conundrum में भाग लिया है, लेकिन इससे पहले कि मैं glibc में delving शुरू करने और सही और केंद्र छोड़ दिया बग दर्ज करने से पहले मैं बस बाहर हो सकता है कि कोई अंतर्दृष्टि प्राप्त करना चाहता था।strftime प्रदर्शन बनाम snprintf
gettimeofday(&tv, 0);
localtime_r(&tv.tv_sec, &local_tm);
char result[25];
strftime(result, 24, "%Y-%m-%d %H:%M:%S", &local_tm);
कोड के बाकी इस प्रश्न के लिए अप्रासंगिक है:
मैं कोड कार्यों में से एक में यह करता है कि की है। जब मैं इसे इसके साथ बदलता हूं:
gettimeofday(&tv, 0);
localtime_r(&tv.tv_sec, &local_tm);
char result[25];
snprintf(result, sizeof(result), "%04d-%02d-%02d %02d:%02d:%02d",
local_tm.tm_year+1900, local_tm.tm_mon+1,
local_tm.tm_mday, local_tm.tm_hour, local_tm.tm_min,
local_tm.tm_sec);
औसतन मुझे 20% प्रदर्शन बढ़ावा मिलता है।
क्या कोई इसमें भाग गया है? क्या यह ओएस विशिष्ट है?
आप किस ओएस/कंपाइलर का उपयोग कर रहे हैं? –
तो 'snprintf' आपके सिस्टम पर' strftime 'से अधिक कुशल है। इसे "बग" नहीं माना जाएगा। –
'strftime' को स्थानीयकरण से निपटना पड़ सकता है (' snprintf' से अधिक)। –