لينكس:ما هي أفضل طريقة لتقدير حجم الكود والبيانات الثابتة للبرنامج؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أريد أن أكون قادرًا على الحصول على تقدير لمقدار التعليمات البرمجية والبيانات الثابتة التي يستخدمها برنامج C++ الخاص بي؟

هل هناك طريقة لمعرفة ذلك من خلال النظر في الملفات القابلة للتنفيذ أو الملفات الكائنية؟أو ربما شيء يمكنني القيام به في وقت التشغيل؟

هل سيساعد objdump & readelf؟

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

المحلول

"الحجم" هو الأداة التقليدية."readelf" لديه الكثير من الخيارات.

$ size /bin/sh
   text    data     bss     dec     hex filename
 712739   37524   21832  772095   bc7ff /bin/sh

نصائح أخرى

إذا كنت تريد اتخاذ الخطوة التالية المتمثلة في تحديد الوظائف وهياكل البيانات التي يجب التركيز عليها لتقليل البصمة، فيمكن أن تظهر لك وسيطة --size-sort إلى nm:

$ nm --size-sort /usr/bin/fld | tail -10
000000ae T FontLoadFontx
000000b0 T CodingByRegistry
000000b1 t ShmFont
000000ec t FontLoadw
000000ef T LoadFontFile
000000f6 T FontLoadDFontx
00000108 D fSRegs
00000170 T FontLoadMinix
000001e7 T main
00000508 T FontLoadBdf

readelf سوف يساعد حقا.يمكنك استخدام ال -S خيار؛من شأنها أن تظهر أحجام جميع الأقسام. .text هو (الجزء الأكبر) من التعليمات البرمجية القابلة للتنفيذ الخاصة بك. .data و .rodata هي بياناتك الثابتة.هناك أقسام أخرى أيضًا، بعضها يُستخدم في وقت التشغيل، والبعض الآخر يُستخدم فقط في وقت الارتباط.

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