आप क्या सी ++ कार्यों के भीतर कोडांतरक embedding (और सामान्य रूप से कॉल सी ++ फ़ंक्शन का उपयोग कर) कुछ सीमाएं होती हैं जो बहुत विलंबता प्रति संवेदनशील है एक आवेदन पत्र है, तो तरह लिख रहे हैं:सी ++ स्वीकार्य के भीतर असेंबलर एम्बेड करना?
inline __int64 GetCpuClocks()
{
// Counter
struct { int32 low, high; } counter;
// Use RDTSC instruction to get clocks count
__asm push EAX
__asm push EDX
__asm __emit 0fh __asm __emit 031h // RDTSC
__asm mov counter.low, EAX
__asm mov counter.high, EDX
__asm pop EDX
__asm pop EAX
// Return result
return *(__int64 *)(&counter);
}
(ऊपर समारोह से आया एक और एसओ पोस्ट मैंने देखा)
क्या आप ब्लैक बॉक्स जैसे असेंबलर-इनलाइन कार्यों का इलाज कर सकते हैं? क्या आप असेंबलर में किए गए गणनाओं से आसानी से परिणाम प्राप्त कर सकते हैं? क्या ऐसे खतरे हैं जिन्हें आप नहीं जानते कि वर्तमान में रजिस्ट्रार आदि में कौन से चर हैं? क्या यह हल करने से अधिक समस्याएं पैदा करता है, या यह विशिष्ट छोटे कार्यों के लिए स्वीकार्य है?
http://www.codeproject.com/Articles/15971/Using-Inline-Assembly-in-C-C
EDIT2 यह और अधिक की ओर उद्देश्य से है:
(मान लें आपके वास्तुकला तय किया जा रहा है, और जाना जाता है)
संपादित मैं सिर्फ यह पाया, यह क्या मैं पर इशारा कर रहा हूँ लिनक्स और x86- यह सिर्फ एक सामान्य सी ++/असेंबलर प्रश्न (या तो मैंने सोचा)।
क्या आप विशेष रूप से विज़ुअल सी ++ के बारे में पूछ रहे हैं? मुझे लगता है कि अन्य कंपाइलरों में अन्य बाधाएं हो सकती हैं। –
@ रोब नोप, अगर कुछ भी मैं लिनक्स, आईसीसी और जी ++ के लिए लक्ष्य रख रहा था। मैंने बस देखा कि पहले असेंबलर समारोह मैंने देखा। – user997112
यह थोड़ा ओटी हो सकता है, लेकिन यदि कोई कूद और वापसी में भारी दंड नहीं होता है, तो अपने कोड को अधिक पोर्टेबल रखने के लिए असेंबलर को शुद्ध असेंबलर (एक अलग संकलन इकाई में) लिखने पर विचार करें। इनलाइनिंग से परहेज करके, आप कभी-कभी अधिक कुशल कैश उपयोग के माध्यम से विलंबता को बेहतर बना सकते हैं। हालांकि एम्बेडेड प्लेटफॉर्म पर यह अधिक महत्वपूर्ण है। – psyill