ما هو تخطيط الذاكرة من مجموعة ديناميكية دلفي من الصفيف الديناميكي من X؟

StackOverflow https://stackoverflow.com/questions/1519016

  •  19-09-2019
  •  | 
  •  

سؤال

أحاول الاتصال بإجراءات في DLL DLL من C #. يتوقع العملية المتصل إلى pleallocate وإدخال array of array of TSomeRecord, ، من ذلك سوف يتلاعب بعد ذلك TSomeRecord عناصر كوسيلة لإعادة النتائج. لذلك، أحتاج إلى اليد الحرفية الدلخي المصفوفات الديناميكية من صفائف X.
حاليا، لقد وجدت هنا أن ديناميكية array of X يتكون من مؤشر للعنصر الأول من الصفيف الديناميكي، وأن العنصر الأول لديه عدد مرجعي وطول الطول (عدد العناصر) من الصفيف الإضراب (من الأعداد الصحيحة 32 بت)، وأن العناصر يتم تخزينها مضمنة متلاطل، بحيث يبدو كل شيء كله في الذاكرة:

RRRLLLLLS ... 000111 ... 12 ... ^

مع RRRR عدد المرجع، LLLL الطول، 0123 العناصر، و ^ حيث يشير المؤشر إلى. هذا يتحمل لقد اختبرتها وتعمل.
للحصول على صفائف ديناميكية متعددة الأبعاد، افترضت أنني أستطيع أن بديلا array of Y ل X في array of X, ، بمعنى آخر أن البعد الخارجي هو ببساطة صفيف ديناميكي من الصفائف الديناميكية (المؤشرات)، مثل ذلك:

RRRLLLLLLLLL0000111111222 ... ^.

عندما تكون العناصر 0000، 1111 وما إلى ذلك الآن مؤشرات 32 بت إلى صفائف ديناميكية مخصصة بشكل مستقل. ومع ذلك، فإن القيام بذلك بهذه الطريقة، ومع ذلك، يكسبني انتهاكا للوصول لمشاربي. يبدو أن هذا ليس كيف تتوقع دلفي أن أفعل ذلك. هل يمكن لأي شخص أن يفسر لي كيف أنا صباحا من المفترض أن تفعل هذا؟

هل كانت مفيدة؟

المحلول

الصفيف الديناميكي هو مؤشر كتلة معبأة من العناصر.

لذلك مجموعة صفيف Tsomerecord هي مؤشر إلى مجموعة من المؤشرات، كل منها يشير إلى عناصر كتلة مع طول (صفيف [firstlevel]) أو لا شيء إذا لم يكن هناك شيء.

بمعنى آخر، ما تفترض أنه صحيحة تقريبا، مع إضافة صفائف مع عناصر صفرية هي NIL. لاحظ أنه ليس من المفترض أن تغير عدد المرجع والطول بنفسك إلا إذا كنت تعرف حقا ما تفعله.

تحديد ما يسبب تعطلك سيكون صعبا بدون رمز. ضع في اعتبارك أنه بالنسبة ل الكل أنواع دلفي الآلي (باستثناء الاصدار)، يجب تخصيص جميع الذاكرة الديناميكية من قبل مدير ذاكرة Delphi.

محاولات ذلك باستخدام مدير الذاكرة لأي لغة تتوافق لا يمكن أن غير ممكن.

نصائح أخرى

إن دليل اللغة (بمجرد توفره كإدلية مطبوعة مفيدة للغاية، والعثور الآن على هذه المعلومات في المساعدة عبر الإنترنت أمر صعب للغاية)

"يتم تخزين مجموعة متعددة الأبعاد ذات البعد الأقصى المتزايد أولا."

وبالتالي ليس لديك AFAIK لم يكن لديك مجموعة من المؤشرات - ما عليك سوى كل بيانات بعدة أبعاد واحدة تلو الأخرى، بدءا من أقصى اليمنى، أعتقد أنها أسرع لأنه لا يوجد مزيد من الإصلاح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top