मेरे पास अल्केमी asm में एक चर घोषित है:
asm ("var बफर: वेक्टर । & Lt; संख्या & gt; = नया वेक्टर। & Lt; संख्या & gt; (100, सच); "); मैं इसे इस तरह से डेटा के साथ आबाद कर सकते हैं:
asm ("बफर [% 0] =% 1;":: "r" (इंडेक्स ): "आर" (मान)); क्या मैं समझ नहीं पा रहा हूं कि एएसएसएम "बफर" वैरिएबल के एक्शनसीप्ट में एक संदर्भ कैसे प्राप्त किया जाए।
(मैं एक तरह से सोच रहा था .. .मैंने जो किया उसे "अल्फा एस्म" से "बफर" फेंकना था, और फिर उसे क्रियात्मक में पकड़ना था, लेकिन दुर्भाग्य से यह बहुत सारी स्मृति को रिसाव करता है।)
क्या ऐसा करने का एक बेहतर विकल्प है?
कृपया ध्यान दें कि प्रदर्शन महत्वपूर्ण है, और डिफ़ॉल्ट अल्केमी मार्शलिंग का प्रयोग बहुत धीमा है।
asm केवल संख्याओं को आगे और पीछे पास करने के लिए है, जिसका अर्थ है कि हमें अल्केमी के आंतरिक इंट-टू-ऑब्जेक्ट मैपिंग का उपयोग करना होगा। मध्यवर्ती एएस 3 कोड के माध्यम से खुदाई (यह देखने के लिए, ACHACKS_TMPS पर्यावरण चर को '1' पर सेट करें), ऐसा लगता है कि CTypemap.AS3ValType मैपिंग करता है इसलिए आप इस तरह एक asm- निर्मित वस्तु वापस कर सकते हैं: स्थिर AS3_Val alc_return_obj (शून्य * स्व, AS3_Val args) {int len = 100; // AS3 asm ("var as3Buffer: वेक्टर। & Lt; संख्या & gt; = नया वेक्टर। & Lt; संख्या & gt; (% 0, सच);":: "r" (लेन)) में कस्टम डेटा बनाएं; // वेक्टर की पीई के गुणकों के साथ (बस मजाक के लिए) (इंट आईडीएक्स = 0; आईडीएक्स & lt; len; idx ++) {डबल मान = 3.14159265 * idx; Asm ("as3Buffer [% 0] =% 1;":: "r" (idx), "r" (मूल्य)); } // AS3 वस्तु AS3_Val alcBuffer के लिए एक C संदर्भ प्राप्त करें; Asm ("% 0 CTypemap.AS3ValType.createC (as3Buffer) [0];": "= आर" (एल्कबफर)); वापसी एल्कबफर; } नोट: हालांकि यह मजेदार हैकिंग है, लेकिन यह इस समस्या को हल करने का सबसे अच्छा तरीका नहीं है। यह संभवतः अल्केमी और फ़्लैश में डेटा प्राप्त करने का सबसे तेज़ तरीका नहीं है। इसके लिए, मैं अलैमी की रैम में डेटा को कॉपी करने के लिए बाइटएरे का उपयोग करने का सुझाव देता हूं उस क्षेत्र की कुछ तकनीकों के लिए इसे देखें।
Comments
Post a Comment