वास्तव में नहीं। आपका ठेठ 1-बाइट तुलना निर्देश 1 चक्र लेता है। आपकी सर्वश्रेष्ठ शर्त एमएमएक्स 64-बिट तुलना निर्देशों का उपयोग करना होगा (this page for an example) देखें। हालांकि, वे रजिस्टरों पर काम करते हैं, जिन्हें स्मृति से लोड किया जाना चाहिए। मेमोरी लोड आपके समय को काफी नुकसान पहुंचाएंगे, क्योंकि आप बाहर जायेंगे एल 1 कैश में सबसे अच्छा, जो कुछ 10x समय की मंदी को जोड़ता है *। यदि आप कुछ भारी स्ट्रिंग प्रोसेसिंग कर रहे हैं, तो आप शायद कुछ निफ्टी स्पीडअप प्राप्त कर सकते हैं, लेकिन फिर, यह चोट पहुंचाने जा रहा है।
अन्य लोग प्री-कंप्यूटिंग का सुझाव देते हैं तार। हो सकता है कि अपने विशेष अनुप्रयोग के लिए काम करेंगे, शायद यह नहीं होगा। आप तार की तुलना करने के है? आप संख्याओं की तुलना कर सकते हैं?
आपका संपादन संकेत की तुलना पता चलता है। वह एक खतरनाक situa है टियन जब तक आप विशेष रूप से गारंटी नहीं दे सकते कि आप सबस्ट्रिंग तुलना नहीं कर पाएंगे (यानी, आप कुछ दो बाइट तारों की तुलना कर रहे हैं: [0x40, 0x50] [0x40, 0x42] के साथ। वे "बराबर" नहीं हैं, लेकिन एक सूचक तुलना वे कहेंगे)।
क्या आपने gcc strcmp() स्रोत देखा है? मैं सुझाव दूंगा कि ऐसा करना आदर्श प्रारंभिक स्थान होगा।
* यदि कोई चक्र 1 यूनिट लेता है, तो एल 1 हिट 10 इकाइयां लेता है, एक वास्तविक रैम हिट वास्तव में लंबे समय तक लेता है।
स्रोत
2009-07-14 21:49:30
इंटेल पर, इसे एक ही निर्देश के साथ करना संभव है। निश्चित रूप से एक चक्र में नहीं। – avakar
@avakar, चक्र केवल एक होगा लेकिन यह बहुत लंबा हो सकता है :) –
जो आप चाहते हैं उसे प्रतीकों कहा जाता है: http://tinyurl.com/nmoxme –