मान लें कि मैं एक मूल्य प्रकार 7 बाइट्स (या 3 या 777) रखना चाहता हूं।एक निश्चित आकार बफर (सरणी) असुरक्षित क्यों होना चाहिए?
मुझे लगता है कि जैसे कि यह परिभाषित कर सकते हैं:
public struct Buffer71
{
public byte b0;
public byte b1;
public byte b2;
public byte b3;
public byte b4;
public byte b5;
public byte b6;
}
इसे परिभाषित करने की एक आसान तरीका एक निश्चित बफर
public struct Buffer72
{
public unsafe fixed byte bs[7];
}
बेशक
दूसरी परिभाषा सरल है उपयोग कर रहा है। समस्या असुरक्षित कीवर्ड के साथ निहित है जो निश्चित बफर के लिए प्रदान की जानी चाहिए। मैं समझता हूं कि यह पॉइंटर्स का उपयोग करके लागू किया गया है और इसलिए असुरक्षित है।
मेरा सवाल यह है कि इसे असुरक्षित क्यों होना चाहिए? सी # मनमानी निरंतर लंबाई सरणी क्यों प्रदान नहीं कर सकता है और इसे सी # संदर्भ प्रकार सरणी या असुरक्षित बफर बनाने के बजाय उन्हें मूल्य प्रकार के रूप में क्यों रख सकता है?
तो क्या समस्या यह है कि सीआईएल को सीमित अनुक्रमित परिचालन करने के किसी भी साधन की कमी है? मुझे कोई अर्थपूर्ण कारण नहीं दिख रहा है कि सीआईएल ऐसी सुविधा क्यों नहीं दे सका। ग्राफिक्स ट्रांसफॉर्म जैसी कुछ चीजें एक संरचना के "आदर्श" 16-बाइट आकार पर थोड़ी सी हो सकती हैं, लेकिन उन्हें तर्कसंगत रूप से उत्परिवर्तनीय मूल्य अर्थशास्त्र होना चाहिए। अपरिवर्तनीय अर्थशास्त्र एक उदाहरण के भीतर एक मूल्य को ट्विक करने के लिए दर्दनाक बनाते हैं, और उत्परिवर्तनीय संदर्भ अर्थशास्त्र अस्पष्टताओं को पेश करते हैं जैसे कि उदा। एक समारोह जो एक उदाहरण देता है वह एक नया उदाहरण या मौजूदा एक वापस करने जा रहा है। – supercat
यह इतना आसान नहीं है कि यह समवर्ती सुरक्षा गारंटी के साथ बहुत सारे मुद्दों को उठाता है। – user1496062
यह पागल है कि संरचना में एक निश्चित आकार के सरणी को एम्बेड करने के लिए कोई * सुरक्षित * तरीका नहीं है। कोड के उच्च प्रदर्शन अनुभागों के लिए मैं केवल 100% ब्लिटेबल structs का उपयोग करना चाहता हूं। कम से कम हमारे पास रिफ रिटर्न और रिफ लोकल हैं। – JBeurer