के लिए मैं इस तरह एक कोड है। लेकिन उपरोक्त फ़ंक्शन वेरिएबल, आर, एस, और परिणाम के लिए 3 अलग-अलग पते प्रिंट करता है। तो यह भ्रमित है .. क्या स्मृति में 'हैलो' स्ट्रिंग की केवल एक प्रति है?डेल्फी कॉपी-ऑन-राइट स्ट्रिंग
5
A
उत्तर
9
जब भी आप एक स्ट्रिंग के तत्व का पता लेते हैं, तो के रूप में गणना करता है संकलक की आंखों में लिखें। जहां तक यह चिंतित है, अब आपके पास स्ट्रिंग के आंतरिक भाग में कच्चा सूचक है, और कौन जानता है कि आप इसके साथ क्या करने की योजना बना रहे हैं। तो, इसके परिप्रेक्ष्य से, यह सुरक्षित खेलता है। यह स्ट्रिंग की एक अनूठी प्रतिलिपि बनाने का निर्णय लेता है, ताकि आप अपने कच्चे सूचक के साथ जो कुछ भी काम करने की योजना बना रहे हों, वह करने के लिए स्वतंत्र हो।
कोड आपके पास यह करने के लिए संकलित:
Project2.dpr.13: r := 'Hello'; 00419EF8 8D45FC lea eax,[ebp-$04] 00419EFB BAA89F4100 mov edx,$00419fa8 00419F00 E827D2FEFF call @UStrLAsg Project2.dpr.14: Writeln(NativeInt(PChar(@r[1]))); 00419F05 8D45FC lea eax,[ebp-$04] 00419F08 E883D3FEFF call @UniqueStringU 00419F0D 8BD0 mov edx,eax 00419F0F A18CE64100 mov eax,[$0041e68c] 00419F14 E853B2FEFF call @Write0Long 00419F19 E82EB5FEFF call @WriteLn 00419F1E E845A1FEFF call @_IOTest Project2.dpr.15: s := r; 00419F23 8D45F8 lea eax,[ebp-$08] 00419F26 8B55FC mov edx,[ebp-$04] 00419F29 E8FED1FEFF call @UStrLAsg Project2.dpr.16: Writeln(NativeInt(PChar(@s[1]))); 00419F2E 8D45F8 lea eax,[ebp-$08] 00419F31 E85AD3FEFF call @UniqueStringU 00419F36 8BD0 mov edx,eax 00419F38 A18CE64100 mov eax,[$0041e68c] 00419F3D E82AB2FEFF call @Write0Long 00419F42 E805B5FEFF call @WriteLn 00419F47 E81CA1FEFF call @_IOTest Project2.dpr.17: Result := r; 00419F4C 8BC3 mov eax,ebx 00419F4E 8B55FC mov edx,[ebp-$04] 00419F51 E88ED1FEFF call @UStrAsg Project2.dpr.18: Writeln(NativeInt(PChar(@Result[1]))); 00419F56 8BC3 mov eax,ebx 00419F58 E833D3FEFF call @UniqueStringU 00419F5D 8BD0 mov edx,eax 00419F5F A18CE64100 mov eax,[$0041e68c] 00419F64 E803B2FEFF call @Write0Long 00419F69 E8DEB4FEFF call @WriteLn 00419F6E E8F5A0FEFF call @_IOTest
UniqueStringU
के लिए कॉल प्रति-ऑन-राइट में नकल कर रहे हैं।
संबंधित मुद्दे
- 1. डेल्फी स्ट्रिंग
- 2. डेल्फी: किसी अन्य स्ट्रिंग
- 3. डेल्फी
- 4. डेल्फी
- 5. डेल्फी 2010 बनाम स्ट्रिंग कार्यों वाइड कार्यों
- 6. कैसे करता है, तो एक स्ट्रिंग डेल्फी
- 7. डेल्फी
- 8. डेल्फी
- 9. डेल्फी
- 10. डेल्फी
- 11. डेल्फी वाइडस्ट्रिंग और डेल्फी 200+
- 12. डेल्फी RTTI
- 13. क्या डेल्फी
- 14. डेल्फी: TStringList.Contains?
- 15. डेल्फी हैशप?
- 16. डेल्फी XE
- 17. कैसे, डेल्फी
- 18. डेल्फी
- 19. डेल्फी
- 20. डेल्फी
- 21. डेल्फी
- 22. डेल्फी
- 23. डेल्फी
- 24. डेल्फी
- 25. डेल्फी
- 26. डेल्फी
- 27. डेल्फी
- 28. डेल्फी
- 29. डेल्फी
- 30. डेल्फी
तो अनन्यस्ट्रिंगयू स्ट्रिंग की सामग्री की प्रतिलिपि बनायेगा? तो स्मृति में 'हैलो' की 3 प्रतियां होंगी, क्या मैं सही हूँ? –
असल में 4 होगा। निरंतर एक स्मृति को पढ़ने में, और तीन प्रतियां। –
बस स्पष्ट होने के लिए, अगर मैंने उदाहरण कोड में 3 लेखों के बयान हटा दिए हैं, तो बस s: = r; परिणाम: = r; स्ट्रिंग की केवल 1 प्रति होगी? –