Silly question about arrays in c and/or c++ -


मान लें कि मेरे पास दो पूर्णांक arrays a और b 10 < Code> int s प्रति सरणी क्या कोई तरीका है कि मैं b [i] से a [i] की कुछ "मैमेट" या "मेमोकपी" चाल का उपयोग कर सकते हैं? मैं सिर्फ लूप w / a [i] + = b [i] आदि के लिए स्पष्ट रूप से कुछ की तलाश कर रहा हूं।

" बेवकूफ "- मुझे लगता है कि यह एक बढ़िया सवाल है!

आप कहते हैं कि" जोड़ना "नहीं" कॉपी करना "और मैं मानता हूँ x86: <पूर्व> शून्य addintvector (int * dstp, const int * srcp, int nints) {int * endp; ENDP = डीएसटी + nints; nints = srcp-dstp; // पुन: उपयोग निंट्स जबकि (dstp! = Endp) {* dstp + = * (dstp + nints); // [आधार + अनुक्रमणिका * 4] का उपयोग करता है x86 एड्रेसिंग डीएसटीपी + = 1; // कुछ पसंद करते हैं ++ डीएसटीपी लेकिन मैं नहीं करता जब यह संकेतक के लिए आता है}}

लूप में अनुवाद करना चाहिए

  add_label: mov eax, [Ebx + esi * 4] जोड़ [ebx], eax add ebx, 4 cmp ebx, edx jne add_label   

यह प्रत्येक पाश प्रति निर्देश है: यह उस से अधिक तेजी से नहीं मिलेगा!

कुछ भी एक जीपीयू का उपयोग करने की बात करते हैं लेकिन इसकी आवश्यकता है 1. अनुप्रयोगों के साथ GPU अंतरफलक और 2. आपके सरणी

संपादित करें

P> मैंने आपकी टिप्पणी "बस पढ़ा है क्योंकि यह किसी मोबाइल डिवाइस पर गेम के लिए है" और मुझे लगता है कि यह एक x86 प्लेटफ़ॉर्म नहीं है और इसलिए संभवत: एक reg + reg * पैमाने पर एड्रेसिंग मोड नहीं है यदि ऐसा है तो कोड लिखित होना चाहिए

  शून्य addintvector (int * dstp, const int * srcp, int nints) {int * endp; ENDP = डीएसटी + nints; जबकि (dstp! = Endp) {* dstp + = * srcp; srcp + = 1; dstp + = 1; }}   

नहीं जानते कि किस वास्तुकला को आप निशाना बना रहे हैं, लेकिन आरआईएससी मानते हुए मुझे लगता है कि कोड के बजाय आठ निर्देश लंबे होंगे ("अपरिवर्तित" psuedocode में):

 < Code> add_label: mov tempreg1, [srcreg] mov tempreg2, [dstreg] जोड़ tempreg2, tempreg1 mov [dstreg], tempreg2 srcreg जोड़ें, 4 जोड़ें dstreg, 4 cmp dstreg, endreg jne add_label    

Comments