وقت التحميل للمكتبات المشتركة مقابل مكتبات ثابتة

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

  •  19-09-2019
  •  | 
  •  

سؤال

لدي سؤال عن المكتبات المشتركة مقابل مكتبات ثابتة وقت التحميل.

نفترض أن لدي للتنفيذ foo.exe والذي يستخدم liba, libb, libc.أيضا في وقت معين هناك أكثر من 10 حالات القابل للتنفيذ تشغيل الجهاز.

الآن إذا كان فوق 3 المكتبات المكتبات المشتركة :1 Insance يتم تحميلها في ذاكرة الوصول العشوائي :الوقت المستغرق سوف يكون الوقت التي اتخذتها الرئيسية() من foo.exe يتم تحميلها في الذاكرة (على افتراض لها ضئيلة) + الوقت لتحميل liba + الوقت لتحميل libb + الوقت لتحميل libc 2 مثيل بدأت :الآن نفترض مثيل ثاني من هذا قابل للتنفيذ يتم تشغيل.لأن جميع المكتبات تم تحميلها بالفعل في الذاكرة الرئيسية, الوقت المستغرق هو فقط من أجل التحميل الرئيسية() إلى الذاكرة التي لا يكاد يذكر .

الآن إذا كان فوق 3 المكتبات مكتبات ثابتة :1 Insance يتم تحميلها في ذاكرة الوصول العشوائي :الوقت المستغرق سوف يكون الوقت التي اتخذتها الرئيسية() من foo.exe تحميل الذاكرة (على افتراض لها ضئيلة) + الوقت لتحميل liba + الوقت لتحميل libb + الوقت لتحميل libc (طبعا الآن كل جزء من القابل للتنفيذ ككل) 2 مثيل بدأت :الآن نفترض مثيل ثاني من هذا قابل للتنفيذ يتم تشغيل.الوقت المستغرق سوف يكون مرة أخرى في الوقت التي اتخذتها الرئيسية() من foo.exe يتم تحميلها في الذاكرة (على افتراض لها ضئيلة) + الوقت لتحميل liba + الوقت لتحميل libb + الوقت لتحميل libc.(لأن كل القابل للتنفيذ غير قادر على حصة librareies هذه هي ساكنة librareies)

حتى استنتاجي هو أنه مع مكتبة ثابتة وقت التحميل سوف تكون أكثر.ولكن قيل لي أن المكتبات المشتركة تأخذ المزيد من الوقت أثناء التحميل من مكتبات ثابتة ، لذلك لن يكون هناك تأخير ولا حتى المكتبات المشتركة ليست خيارا جيدا.كيف يكون هذا ممكنا ؟

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

المحلول

ربط (حل المراجع) ليست حرة.مع ثابت ربط القرار هو القيام به مرة واحدة وإلى الأبد عندما الثنائية يتم إنشاؤها.مع ديناميكية الربط لا بد من القيام به في كل مرة الثنائية يتم تحميلها.ناهيك عن أن التعليمات البرمجية المترجمة إلى تشغيل في مكتبة مشتركة يمكن أن تكون أقل كفاءة من التعليمات البرمجية المترجمة إلى أن تكون مرتبطة بشكل ثابت.تكلفة الدقيق يعتمد على العمارة على نظام تنفيذ ربط ديناميكية.

تكلفة صنع مكتبة ديناميكية يمكن أن تكون مرتفعة نسبيا عن 32 بت x86 مجموعة التعليمات:في قزم تنسيق ثنائي, واحد من الشحيحة أصلا في السجلات يجب أن تكون التضحية لجعل مرتبطة بشكل حيوي رمز المنقولة.كبار السن أ.بها شكل توضع كل المكتبة المشتركة في مكان ثابت, ولكن هذا لم الحجم.وأعتقد أن نظام التشغيل Mac OS X وسيطة في نظام المكتبات الديناميكية حيث وضعت في مرحلة ما قبل تحديد مواقع في مساحة العنوان ، ولكن حل الصراعات في نطاق الفرد الكمبيوتر (الطويلة "تحسين أداء النظام" المرحلة بعد تثبيت برنامج جديد).في هذا النظام (الذي يسمى قبل ملزم) يسمح لك أن يكون لديك كعكة وأكلة جدا.أنا لا أعرف إذا كان prebinding لا يزال من الضروري الآن أن أبل تقريبا تحولت إلى amd64 العمارة.

أيضا ، على نظام التشغيل الحديثة سواء بشكل ثابت و مرتبطة بشكل حيوي هو رمز فقط تحميل (المقسمة إلى صفحات في) من القرص إذا تم استخدامه ، ولكن هذا هو تماما متعامد على سؤالك.

نصائح أخرى

ترتبط المكتبات الثابتة في الوقت المحدد، وترتبط المكتبات المشتركة في وقت التشغيل. لذلك، فإن الملفات التنفيذية التي تستخدم المكتبات الثابتة إطفاء كل وقت الارتباط قبل أن تكون مكتوبة على القرص.

شكرا جزيلا لهذا الاستجابة السريعة بشكل لا يصدق. لدينا 2 منظر رئيسي:

q1. Architecure-1: افترض حجم EXE 3GB (المكتبات الثابتة). 95٪ هي المكتبات و 5٪ الرئيسية (). مع مثل هذا الحجم الكبير سيؤدي هذا EXE، اسلك المزيد من الوقت (على افتراض المكتبات الثابتة) أو سيستغرق الارتباط بهذا Exe المزيد من الوقت (على افتراض استخدام المكتبات المشتركة، وإذا كانت جميع المكتبات بالفعل في الذاكرة فقط الارتباط يجب القيام به.)

ArchiteCure-2: افترض أن لدي حجم EXE 1.5GB (95٪ ليب + 5٪ رئيسي () 5٪ ())، و 6 مثيلات من هذا يعملون في نفس الوقت. بمجرد تشغيل هذه الحالات السادسة، سيتم تشغيلها لعدة أيام، نفترض أننا مستعدون لاتخاذ التأخير الإضافي أثناء التحميل الأولي + الربط من هذه الحالات الستة.

Q2. الآن إذا كنت أستخدم كائنات مشتركة بدلا من الكائنات الثابتة، فهل لدي الكثير من المساحة الحرة على ذاكرة الوصول العشوائي لأن جميع المكتبات مشتركة بين الحالات 6؟ لن يسرع تنفيذي في الوقت الحقيقي بسبب مساحة أكبر في ذاكرة الوصول العشوائي التي تقلل من تبديل الصفحة؟

q3. إذا كنت تستخدم ملفات "الخريطة" لتقليل عدد الرموز التي يتم تصديرها (والتي لا تكون ممكنة فقط باستخدام المكتبات المشتركة) لن تنخفض حجم جدول الرموز الخاص بي ولن يحسن أداء وقت التشغيل؟

شكرا سود

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