मैं सी # में काम कर रहा हूं और यदि संभव हो तो unsafe
कोड से बचना चाहता हूं। यदि मेरे पास एक ऑब्जेक्ट या सरणी है जिसे कैश लाइन भरने के लिए आकार दिया गया है और मैं ऑब्जेक्ट के ऑब्जेक्ट या इंडेक्स के प्रत्येक फ़ील्ड को लिखना चाहता हूं, तो क्या सीपीयू लिखित-टू-लाइन को फ्लश करने से पहले सभी लिखने के लिए प्रतीक्षा करेगा या क्या यह शुरुआती फ्लश करेगा जब केवल एक या कुछ लिखने आए हैं?एक सीपीयू कैश लाइन लिखने के बाद स्मृति में फ़्लश कब होती है?
यदि मैं फ्लश करना चाहता हूं तो केवल एक बार लाइन पर लिखने के बाद ही, क्या मुझे जल्दी उत्तराधिकार में दिनचर्या के अंत में सभी लिखना चाहिए? मुझे पता है कि सीपीयू और कैश समेकन प्रोटोकॉल इस पर भिन्न हो सकते हैं, मैं अंगूठे के जवाब के आम तौर पर सही नियम की तलाश में हूं।
आप क्या लिख रहे हैं, आप इसे कहां लिख रहे हैं, और आप लिखने के लिए क्या उपयोग करते हैं? –
नहीं, आपको इसके बारे में गलत विचार मिला है। एक के लिए, आप यह नियंत्रित नहीं कर सकते कि .NET ऑब्जेक्ट कैश लाइन कैसे फैलाता है। आपके पते पर प्रत्यक्ष नियंत्रण नहीं है, जीसी ढेर आवंटक ऐसा करता है। संरेखण x86 पर केवल 4 है, 8 x64 पर 8 और कैश लाइन 64 बाइट्स है। इसके अलावा, कचरा कलेक्टर ढेर को संकलित करता है ताकि पता यादृच्छिक रूप से बदल सके। बैक लिखें जब कैश लाइन प्रतिस्थापित होने वाली है।कुछ और आप सीधे खुद को प्रभावित नहीं कर सकते हैं। –
मुझे पता है कि मैं सीधे नियंत्रित नहीं कर सकता कि जीसी आवंटक मेरी वस्तुओं को कैसे आवंटित करता है, लेकिन मुझे लगता है कि यदि मेरे पास ऑब्जेक्ट कैश लाइन के समान आकार है तो मुझे लगता है कि जीसी पूरी वस्तु को एकल में लोड करने की अधिक संभावना है कैश लाइन, नहीं? आवंटक वस्तु को तोड़ने की संभावना नहीं है। यह ठीक है अगर जीसी इसे चारों ओर ले जाना चाहता है, लेकिन अगर पूरी चीज कैश लाइन में ठीक से फिट बैठती है, तो मुझे लगता है कि जीसी इसे कैश लाइनों में तोड़ नहीं देगा, कम से कम ज्यादातर समय नहीं। – hatch22