कोड नीचे दिखाई दिया है प्रपत्र नेट फ्रेमवर्क:मार्शल.WriteInt64 विधि का कोड इतना जटिल क्यों है?
[SecurityCritical]
public static unsafe void WriteInt64(IntPtr ptr, int ofs, long val){
try{
byte* numPtr = (byte*) (((void*) ptr) + ofs);
if ((((int) numPtr) & 7) == 0){
*((long*) numPtr) = val;
}
else{
byte* numPtr2 = (byte*) &val;
numPtr[0] = numPtr2[0];
numPtr[1] = numPtr2[1];
numPtr[2] = numPtr2[2];
numPtr[3] = numPtr2[3];
numPtr[4] = numPtr2[4];
numPtr[6] = numPtr2[6];
numPtr[7] = numPtr2[7];
}
}
catch (NullReferenceException){
throw new AccessViolationException();
}
}
मेरी राय में, *((long*) numPtr) = val
पर्याप्त है, और बहुत ही कुशल है।
इतना जटिल क्यों?
शायद endiens के साथ कुछ बचाने के लिए पाश लंघन? । – KingCronus
मुझे लगता है कि यह मुझे स्मृति संरेखण के साथ करना है। –
यह memcpy() है, हाथ से अनियंत्रित। एआरएम कोर पर आवश्यक, मुझे लगता है। –