2010-06-22 10 views
5

मेरे पास 3 डी वेक्टर क्लास है। निजी चर परिभाषित किए गए हैं:मेमोरी तुलना, जो तेजी से है?

 
union { 
    struct { 
     double x; 
     double y; 
     double z; 
    }; 
    double data[3]; 
}; 

ऑपरेटर == लागू करने में, जो तेज़ है?

 
return this->x == v.x && this->y == v.y && this->z == v.z; 

या

 
return memcmp(this->data, v.data) == 0; 
+0

मैंने यूनियन का उपयोग किया ताकि मैं केवल 'डेटा' को तृतीय पक्ष एपीआई में पास कर सकूं जिसके लिए' डबल * 'की आवश्यकता होती है। – Anthony

+0

@ स्टीफन - सीधे संरचना को memcmp-ing जोखिम भरा हो सकता है। यदि संकलक पैडिंग में डालता है, तो संरचनाएं भिन्न हो सकती हैं भले ही सभी फ़ील्ड समान हों। –

+0

@ आर सैमुअल: धन्यवाद, अच्छा बिंदु। _comment backrawn._ :) – Stephen

उत्तर

15

दुर्भाग्य से दो बराबर नहीं हैं। (विशेष रूप से NaNs और हस्ताक्षरित शून्य FPU के अंदर bitwise तुलना का उपयोग नहीं करते हैं)।

तो आपको अपनी पसंद को सहीता के आधार पर बनाना चाहिए, गति नहीं।

+1

ठीक है, मैं बस इसके बारे में पूरी तरह से भूल गया। मुझे लगता है कि रूकी गलती। – Anthony

+1

@Duracell: रूकी गलती अच्छा कोड पर प्रदर्शन के बारे में चिंता कर रही है। :) प्रदर्शन आपकी आखिरी चिंता है। – GManNickG

+1

@GMan: आप यह कह सकते हैं, लेकिन मैं पूरी तरह से इस तथ्य को अनदेखा कर दूंगा कि memcmp काम नहीं करेगा। इसके बिना, मुझे लगता है कि मेरा कोड अच्छा था और इसलिए गति को देख सकता था। – Anthony

संबंधित मुद्दे