بهینه سازی عملکرد نرم افزار

ایجاد پروژه نرم افزار
اسفند ۲۲, ۱۳۹۵
ساختن نرم افزار ها به همراه مخاطبین
اسفند ۲۴, ۱۳۹۵

ویژگی های بهینه سازی عملکرد نرم افزار شامل اندازه گیری و بهبود بخشیدن عملکرد نرم افزار می شود

اگر یک نرم افزار ضعیف عمل کندو پاسخ با تاخیر به اعمال کاربر بدهد،تجربه کاربر می تواند رنج ببرد.برای اجتناب ازین وضعیت بخشی از کد باید بهینه سازی شود

بسیاری از پردازنده هایی که امروزه در موبایلها استفاده می شوند بر پایه تکنولوژی چند هسته ایست و نابراین شما باید ویژگی های مورد استفاده این سخت افزار را در نظر بگیرید.برای استفاده موثر از ظرفیتهای چند هسته ای شما به پخش کردن کدتان برای اجرا روی چند هسته به طور همزمان نیاز دازید

به طور سنتی،این عمل با استفاده از pthread انجام می شد.اما این روش سرریز مقداردهی اولیه وپایان موضوعات داشت و می توانست خطای بالقوه زمان اجرا تولید کند.چندین راه حل برای بهره برداری آسان از ظرفیتهای چند هسته ای وجود دارد. این خلاصه ی راه حلهای pthreads به شما اجازه میدهد تا روی توسعه نرم افزار بدون نگرانی درباره ی مدیریت سطح موضوع تمرکز کنید.

: برای بهبود عملکرد نرم افزار

  1. .شناسایی تنگناها که به بهینه سازی نیاز دارد
  2. . بهینه سازی تنکناها با تولید مجدد کدها
  3. . سنجیدن عملکرد برای مقایسه دستاوردهای تولید مجدد
  4. اگر مقصود عملکرد دیده شد شما می توانید فرایند را متوقف کنید. همچنین به قدم۲ بروید و آنرا تکرار کنید تا مقصود مشاهده شود the goal is met

سنجیدن عملکرد نرم افزار

runtime: استودیوی تایزن از ابزارهای متنوعی که به سنجش و افزایش عملکرد در زمان اجرا پشتیبانی میکند

  • تحلیل کننده پویا

تحلیل کننده پویا به شناسایی تنگناها و بهبود الگوهای مورد استفاده منبع در نرم افزار کمک میکند. برای اطلاعات بیشتر در مورد این استفاده « تجزیه و تحلیل پویا» را ببینید.

Valgrind خطاهای حافظه یا نشتی ها را تشخیص میدهد. این ابزار به بهبود الگوهای مورد استفاده حافظه در نرم افزار بومی کمک میکند. برای اطلاعات بیشتر درباره این استفاده «تجزیه و تحلیلvalgrind» را ببینید.

سنجش عملکرد به شما اجازه میدهد تا تنگناهایی که مقدار بحرانی زمان در حین اجرای نرم افزار میگیرند را شناسایی کنید و زمان اجرای کد قبل و بعد از بهینه سازی را مقایسه کنید.

پروفایل می تواندموقعیت تنگناهای غیر منتظره که شما متوجه آنها نشده اید را نشان دهد.در غیر این صورت یکبار که تنگناها شناسایی شدند شما می توانید اعمال مکانیزمی برای پاکسازی آنها در نظر بگیرید. این راه حل برای همه موقعیتها یا برای همه الگوریتمها کار نمی کند،اما می تواند به خرج کردن زمانتان برای تحقیق راجع به احتمالات ارزش دهد

نکات عملکرد

یک نرم افزار سریع میتواند عمر باتری را افزایش دهد.اگر نرم افزار شما آنطور که انتظار میرود سریع نباشد شما می توانید به اطلاعات پروفایل نگاه کنید تا تنگناها را شناسایی کنید.تعمیر کردن این تنگناها سرغت نرم افزار را با حداقل تلاش افزایش میدهد

چند نکته کلی برای بهبود عملکرد نرم افزارتان عبارتند از:

  • انتخاب مناسب ترین الگوریتم و ساختار داده ها
  • بهینه سازی سطح بالا مهم است زیرا می تواند ترتیب پیچیدگی را تغییر دهد.اگر کد شما شامل مرتب سازی،جستجو یا مقایسه است از الگوریتم بهینه و ساختار داده ها استفاده کنید.
    • برای اینکه کارهای کم اهمیت ، کارهای پر اهمیت را به تاخیر نیندازند کارها را تقسیم بندی کنید به گونه ای که شامل هر دو نوع کار شود.اجرای هردو کار در یک taskباعث به تاخیر انداختن میشود.
    • به عنوانUIخود محاسبات سنگین را در یک رشته اجرا نکنید.
  • از گزینه های بهینه که با زنجیره ابزار ارائه می شوند استفاده کنید

تجزیه و تحلیل پویا

برای قدرتمند ،سریع تروپایدار ساختن نرم افار خود شما به تجزیه و تحلیل عملکرد آنها برای تشخیص دادن و تعمیرکردن تنگناها،باگها و حافظه و نشتی های منبع نیاز دازید.

دستورالعملها و مثالهای زیر به شما کمک میکنند تا بطور موثر از تجزیه و تحلیل پویا استفاده کنید.

  • اجرای تجزیه تحلیل پویا

. توضیح میدهد چگونه آنالیز پویا را راه اندازی کنید

  • استفاده از نتایج آنالیز

توضیح میدهد چگونه آنالیز پویا برای بهبود هدفهای متنوع استفاده کنید

اجرای تجزیه و تحلیل پویا

شما می توانید آنالیز پویا را در استودیوی تایزن یا هرنرم افزار مستقل ازمنوی استودیو تایزن اجرا کنید

  • : برای اجرای آنالیز پویا در استودیوی تایزن:

.

در project explorer view استودیوی تایزن روی پروژه خود راست کلیک کنید

مسیر profile as>profile with dynamic analyzer را انتخاب کنید

پروژه انتخاب شده روی دستگاه هدف ساخته، بسته بندی و نصب میشود. آنالیزور پویا اجرا میشود و پروفایل به طور خودکار شروع میشود.

  • برای اجرای آنالیز پویا به عنوان یک مستقل از منوی استودیوی تایزن:

آنالیز پویا را از ابزارهای استودیوی تایزن اجرا کنید

دستگاه هدف و نرم افزار را برای دنبال کردن از جعبه کوچک در نوار ابزار آنالیز پویا انتخاب کنید

روی دکمه start کلیک کنید

جزئیات عملکرد بازیابی شده در طول ردیابی نرم افزار خود در فایلهای ردیاب ذخیره میشود. شما میتوانید فایلهای ردیابی را از طریق نوارابزار آنالیزگر پویا مدیریت کنید. برای استفاده از جزئیات «رسیدگی به کارهای متداول آنالیزگر پویا» و «رسیدگی به کارهای پیشرفته آنالیزگر پویا» را ببینید.

استفاده از رابط خط فرمان برای دسترسی به ویژگی های آنالیزگر پویا

آنالیزگر پویا دسترسی را برای امکانات خود را از طریق ابزار رابط خط فرمان(cli )فراهم میکند. این امکان میتواند مفید باشد. برای مثال در موارد زیر:

  • ابزارcli می تواند در آزمایش و تشریح سناریوی اتوماسیون استفاده شود
  • ابزارcli میتواند در محیطهای گرافیکی کم استفاده شود و داده های پروفایل گردآوری شده می تواند به یک محیط دیگرانتقال یابد که محیط میتواند با استفاده از رابط کاربری گرافیکی آنالیزگر پویا بیشتر تجزیه و تحلیل کند
  • ابزار cli میتواند به وسیله افرادی که دوست ندارند همیشه از رابط کاربری گرافیکی استفاده کنند،مورد استفاده قرار بگیرد.

برای اطلاعات بیشتر درباره ی استفاده از رابط کاربری گرافیکی آنالیزگر پویا «رابط خط فرمان» را ببینید.

استفاده از نتایج تجزیه و تحلیل

پس از اینکه تشریح کردن توسط آنالیزگر پویا خاتمه یافت، نتایج تجزیه و تحلیل میشود.آنالیزگر پویا، زمانی که نرم افزار شما اجرا شد اطلاعات گردآوری شده متنوعی فراهم میکند.برای مشاهده اهداف بهبود از نتایج انتخابی استفاده کنید

دستورالعملهای زیر به شما کمک میکنند تا از نتایج آنالیز استفاده کنید

  • تجزیه و تحلیل عملکرد

توضیح میدهد چگونه عملکرد نرم افزار را تحلیل کنید

  • تشخیص نشتی ها

توضیح میدهد چگونه حافظه و نشتی های منبع را تحلیل کنید

  • نرم افزار چندرشته ای و تجزیه و تحلیل هماهنگ سازی

توضیح میدهد چگونه رشته ها و هماهنگ سازی را تحلیل کنید

تجزیه و تحلیل عملکرد

شما میتوانید از آنالیزگر پویا استفاده کنید تا عملکرد نرم افزار را تحلیل کنیدو تنگناها را شناسایی کنید. بعد از شناسایی تنگناها شما میتوانید کدها را برای رفع کردن آنها تغییر دهید.این عملکرد نرم افزار را به طرز قابل توجهی افزایش میدهد و عمر باتری دستگاهی که نرم افزار را اجرا میکند زیادتر میکند

برای تحلیل عملکرد نرم افزار با استفاده از آنالیگر پویا از امکانات زیر استفاده کنید:

  • عمل توضیح:

زمان تحلیل عملکرد نرم افزار زمان اجرای هر روش یکی از قابل توجه ترین عاملهاست. شما میتوانید عملکرد هر نرم افزار را با شناسایی موقعیت تنگناهای غیرمنتظره بهبود ببخشید و آنالیزکردن و بهینه سازی متداول ترین روشهای مورداستفاده در آنالیزگر پویا هستند.

برای تشخیص و درست کردن رئشها بیشتر اوقات استفاده میکنیم از:

      • View>report>function profiling را در منو انتخاب کنید که جدول توضیح عملکرد که بیشتر اوقات استفاده میشود را نشان میدهد. روی عنوان ستون برای نمایش نتایج مرتب شده کلیک کنید.
  • برای نمایش زمان اجرای روشها که بدون نام اخصاصی دوره نامیده میشود از امکانات بازرسی محدوده آنالیزگر پویا استفاده کنید.

شکل: جدول توضیح عملکرد

  • جدول «جدول زمانی cpu»

زمان تحلیل عملکرد نرم افزار بارcpu یکی از قابل توجه ترین عاملهاست. اوج بار cpu میتواند به عملکرد تنگناها منجر شود.بار زیاد cpu منجر به زیاد شدن مصرف حافظه می شود که عمر باتری دستگاهی که نرم افزار را اجرا میکند را کم میکند. برای احتناب از این شما به بهینه سازی کد خود نیاز دارید.

برای تشخیص و درست کردن اوج بارcpu با امکانات بار cpu آنالیزگر پویا:

صفحه جدول زمانی را انتخاب کنید و جدولcpu را مشاهده کنید

موس را روی اوج cpu شناور کنید تا مقدار بار cpu در یک راهنمای ابزار ببینید.

روی اوجcpu کلیک کنید تا آخرین روش کاربر که قبل از اوج در جدول نشان نام فراخوانده میشد برجسته کنید.

روی روش برجسته شده راست کلیک کنید و نمایش منبع اعلام را انتخاب کنید. کد منبع به عنوان یک تک ابزار نمایش داده میشود.برای بررسی کردن روشها،روی آن دابل کلیک کنید و کد منبع در استودیوی تایزن نمایش داده میشود.

کد را در استودیوی تایزن تغییر دهید ، دوباره بنویسید ونرم افزار را دوباره تحلیل کنید تا ببینید که آیا تنگناها از بین رفته اند.

شکل: جدول زمانی cpu و جدول نشان نام

  • بار رشته

اگر شما از رشته ها در کد نرم افزار خود استفاده کنید،شما به آنالیز کردن بار هر رشته در طول اجرای نرم افزار نیاز دارید. امکانات بار رشته به توزیع کردن بار رشته کمک میکند.شما می توانید کد را برای بهینه سازی بار رشته در طول نگهداری یک رشته تنها تغییر دهید.

بار رشته در جدول رشته نمایش داده میشود.خط رشته هایی که با آبی نمایش داده شده اند بار رشته را بدون زمان نمایش میدهد.رنگ پررنگتر،بار بیشتر را نشان میدهد.

شکل: بار رشته

تشخیص نشتی

برای بهبود عملکرد نرم افزار خود،شما میتوانیداز آنالیزگر پویا برای تشخیص نشتی حافظه استفاده کنید. نشتی حافظه زمانی اتفاق می افتد که ظرفیت حافظه که به طور پویا در زمان اجرای نرم افزار اختصاص یافته است بعد از اینکه اجرا متوقف شد بازنگردد. تشدید یا جمع آوری نشتی های حافظه می تواند روی عملکرد نرم افزارتان همراه با دیگر نرم افزارها و برنامه ها تاثیر بگذارد. برای اطلاعات بیشتر «انجام تحلیل حافظه» را ببینید.

نرم افزار چندرشته ای و تحلیل همگام سازی

درک کردن اجرای رشته در نرم افزارهای چندرشته ای می تواند چالش برانگیز باشد.GDB( (اشکال زدای GNU )از فرایند اشکال زدایی از نرم افزارهای چندرشته ای پشتیبانی میکند اما از زمانی که از موضوعات همگام سازی استفاده میکند، اشکال زدایی می تواند کاملا سخت شود. آنالیزگر پویا از سوی دیگر امکانات موثر آنالیز رشته را فراهم میکند. برای اطلاعات بیشتر «انجام آنالیز رشته» را ببینید.

آنالیز valgrind

Valgrind به شما کمک میکند تا خطاهای حافظه یا نشتی ها را در نرم افزارتان زمان اجرا تشخیص دهید

دستورالعملها و مثالهای زیر به شما کمک میکنند تا به طور موثر از valgrind استفاده کنید

  • اجرای valgrind

توضیح میدهد چگونه با نرم افزارتان valgrind را اجرا کنید.

  • مشاهده نتایج valgrind

اظلاعات نتایج تحلیل شده توسطvalgrind را توضیح میدهد

اجرای valgrind

برای تنظیم گزینه ها برای نرم افزار خود:

در project explorer view روی پروژه راست کلیک کنید و profile as>profile configurations را انتخاب کنید

در پنجره پیکربندی پروفایل روی profile with valgrind راست کلیک کنید و new را انتخاب کنید

پیکربندی انتخاب شده را انتخاب کنید

به مشخصات حافظه بروید>جدول جمع اوری داده ها

از بین دو نوع تنظیمات مشخصات حافظه انتخاب کنید:

  • چک کردن خطای حافظه و نشتی حافظه

این گزینه ازابزارmemcheck استفاده میکند تا نرم افزارتان را توضیح دهد

    • Heap memory profiling پرکردن مشخصات حافظه

این گزینه از ابزار مانع برای توضیح نرم افزارتان استفاده میکند

در جدول تنظیمات عمومی،گزینه valgrindعمومی را تنظیم کنید. این گزینه برای هر دو memcheck و توضیح مانع استفاده میشود.

شکل: خطای حافظه و گزینه های داده های نشتی حافظه

جدول:گزینه های تنظیمات عمومی

Option name

نام گزینه

Description

توضیح

ردیابی کودکان درexec

وقتی فعال باشد ردیاب valgrind در فرایندهای فرعی از طریق سیستم تماسexec اغاز میشود. این برای نرم افزارهای چند پروژه ای لازم است.valgrind در چنگ کودکان ردیابی میکند(این خیلی مشکل نخواهد بود از زمانی که fork کپی یکسان از یک فرایند می سازد)بنابراین این گزینه مسلما بطور بدی نامیده شده است.با این حال بیشتر کودکان چنگ به هرحال آنرا فورا تماس exec می نامند.

اجرای libc-freeres برای خروج

این گزینه فقط وقتی مناسب است کهvalgrind با سیستم عامل لینوکس اجرا شده باشد.کتابخانه GNU C(libc.so) که در همه نرم افزارها استفاده میشود،می تواند حافظه را برای استفاده خودش اختصاص دهد. معمولا این ،حافظه را بعد از اینکه نرم افزار پایان یافت آزاد نمیکند چون هسته لینوکس همه منابع فرایند را اصلاح میکند زمانی که یک فرایند به هر راهی خارج شود.

نویسنده های glibc دریافتند که این رفتارباعث جستوگران نشتی میشود(مانندvalgrind )برای گزارش دروغین نشتی درglibc زمانی که یک نشتی چک میشود در خارج شدن انجام میشود. برای اجتناب از این ،آنها یک روال که مخصوصا glibe ،libc-freeres نامیده میشود فراهم میکنند برای اینکه glibe را مجبور کنند بفهمد همه حافظه ای که دارد اختصاص داده شده است.

اگرچه memcheck سعی میکند libc-freere در خارج شدن را اجرا کند. متاسفانه libc-freere در برخی از ورژنهای خیلی قدیمیglibe به اندازه کافی مشکل دار است تا موجب شکافهای قطعه بندی شود.

این به خصوص در کلاه قرمز۷٫۱ قابل ملاحظه بود.بنابراین این گزینه برای سکونت اجرایlibc-freere فراهم شد.اگربه نظر میرسد نرم افزار شما به خوبی روی valgrind اجرا میشود،اما در خروج شکاف ایجاد میکند از کار انداختن این گزینه میتواند مشکل را بر طرف کند.اگرچه به قیمت گزارش محتمل اشتباه نشتی ها در libc.so فضا اشغال میکند.

رمزگشایی نامهای c++

رمزگشایی خودکار نامهای c++ به صور ت پیش فرض فعال است.زمانی که فعال است،valgrind تلاش میکند تا نامهای رمزی c++ را به چیزهای نزدیک به اصل بازگردانی کند. رمزگشایی به نمادهایی که توسطg++ نسخه ۲x,3x,4x رمزنگاری شده اند رسیدگی میکند.

یک حقیقت مهم راجع به رمزگشایی این است که نامهای روش که در فایلهای توقیف شده ذکر شدند باید به فرم رمزی خود باشند.

Valgrind نامهای روش را رمزگشایی نمیکند زمانیکه به دنبال توقیف های قابل اجرا میگردد،زیرا برای انجام بطریق دیگر محتویات وابسته فایل توقیفی را به حالت دستگاه رمزگشاییvalgrind میسازد و همچنین تطابق توقیفها را آرام میسازد.

تماس گیرنده های رم در ردیابی دسته

این گزینه حداکثر تعداد ورودی نشان داده شده در ردیابی دسته که موقعیتهای نرم افزار را شناسایی میکند مشخص میکند.خطاها مشترکند در استفاده ازموقعیت ۴ روش بالا(مکانی درروش رایج و۳ تماس گیرنده فوری آن)

بنابراین این روی همه خطاهای گزارش شده اثر نمیگذارند.حداکثر ارزش برای این گزینه ۵۰است.توجه داشته باشید تنظیمات بالاتر valgrind را مجبور میسازد کندتر اجرا شودو حافظه بیشتری بگیرد اما میتواند زمان کار با نرم افزارهایی با زنجیر پاسخ عمیقا تو در تومفید باشد

محدود کردن خطاهای گزارش شده

زمانی که فعال است،valgrind گزارش خطاها را پس از ۱۰۰۰۰۰۰۰ در کل یا۱۰۰۰خطای متفاوت که دیده شده اند متوقف میکند.این برای توقف دستگاه ردیابی خطا از سرریز عظیم عملکرد در نرم افزار با خطاهای زیادی است.

نمایش خطاها زیر اصلی

به صورت پیش فرض،ردیابی دسته برای خطاها هیچ روشی که در زیر main() ظاهر میشود را نمایش نمیدهد.متناوبا if main() ردیابی دسته حاضر نیست. این هیچ عنوانی زیر main() را شبیه روشها نشان نمیدهد ،همانند libc-start-main()در glibe

علاوه بر این if main() مشابه روشها در ردیابی حضور دارند.آنها برای قطعی تر ساختن خروجی ها هنجار شده هستند(زیر main() ). اگر این گزینه فعال شده باشد همه ورودی های ردیابی بسته نمایش داده میشوند و main() همانند روشها هنجار شده نیستند.

ماکزییم اندازه قالب دسته ها

این گزینه ماکزیمم اندازه قالب دسته ها را مشخص میکند.اگر اشاره گر دسته بیش ازین مقدار حرکت کند،فرض valgrind این است که نرم افزار با یک دسته متفاوت تعویض شده است.

شما میتوانید از این گزینه استفاده کنید که ایا نرم افزارتان دسته بزرگی که به آرایه ها اختصاص یافته است دارد. اگر این به وسیله بیشتر از مقدار آستانه تغییر کند،valgrind فرض میکند نرم افزارتان به یک دسته متفاوت تعویض شده است و mwmcheck متفاوت رفتار میکند از رفتاری که دارد زمانیکه اشاره گر دسته کمتر از آستانه تغییر میکند

معمولا این کشف کننده به خوبی کار میکند.اگر نرم افزارتان به سازه های بزرگی روی دسته اختصاص یافته باشد این کشف کننده فریب میخورد و memcheck متعاقبا تعداد زیادی از فرایندهای بی اعتبار دسته را گزارش میدهد.این گزینه به شما اجازه میدهد تا آستانه را به اندازه متفاوتی تغییر دهید.

شما باید استفاده از این گزینه را فقط زمانی درنظر بگیرید اگر خروجی اشکال زدایی هم ،شما را به انجام آن هدایت میکند.در این مورد این به شما آستانه جدیدی که باید اختصاص بدهید را میگوید.

بطور کلی ، اختصاص دادن سازه های بزرگ روی دسته ایده بدی است زیرا شما میتوانید به آسانی فضای دسته را تمام کنید مخصوصا در سیستمهایی با حافظه محدود یا آنهایی که انتظار میرود تعداد زیادی از رشته ها را هریک با یک دسته کوچک پشتیبانی کند

و همچنین به خاطر اینکه چک کردن خطاها که به وسیلهmemcheck انجام میشوند بیشتر برای داده های اختصاص یافته دسته موثرند تا داده های اختصاص یافته stack . اگر شما باید ازین گزینه استفاده کنید در نظر داشته باشید دوباره نوشتن کدتان برای اختصاص روی دسته سریع تر از روی stack است.

فایل سرکوب شده

این گزینه یک فایل اضافی از چیزی برای خواندن شرح خطاها برای سرکوب گران مشخص میکند. شما میتوانید از بیشتر از ۱۰۰ فایل سرکوب شذه اضافی استفاده کنید.

در جدول تنیمات پیشرفته ابزار گزینه های پیشرفته را تنظیم کنید.

محتویات جدول به انتخابی که شما در جدول داده های طبقه بندی میکنید بستگی دارد

جدول: گزینه های تنظیمات پیشرفته ابزار برای خطای حافظه و توضیح نشتی حافظه

Option name

Description

چک کردن نشتی

این گزینه، زمانیکه فعال باشد، نشتی های حافظه زمانیکه نرم افزار مشتری پایان می یابد را جستجو میکند.اگر روی خلاصه تنظیم شده باشد،این لیست میکند که چه تعداد نشتی بطور کامل رخ داده است. این همچنین جزئیات هر یک از نشتی منحصر به فرد میدهد.

وضوح نشتی

زمانیکه انجام نشت چک میشود، این گزینه تعیین میکند چگونه memcheck مشتاق ،معکوسهای متفاوت را برای هدف ادغام چندین نشتی به یک گزارش نشتی تنها مشابه در نظر میگیرد . زمانیکه روی کم تنظیم شود،فقط ۲ ورودی اول به تطابق احتیاج دارند. زمانیکه روی متوسط تنظیم شود ، ۴ ورودی باید تطبیق شوند.

زمانیکه زیاد است همه ورودی ها باید تطبیق شوند..

برای اشکال زدایی نشتی سخت هسته شما شاید بخواهید از وضوح نشتی=زیاد به همراه numتماس گیرنده=۴۰ یا یک عدد مشابه بزرگ استفاده کنید. تنظیمات وضوج نشتی توانایی memcheck را برای پیدا کردن نشتی ها تغییر نمیدهد. این فقط تغییر میدهد چگونه نتایج حاضر شده اند.

اندازه لیست آزاد(بلاکها)

زمانیکه نرم افزار مشتری استفاده از حافظه را رها میکند(درc ) یا پاک میکند (در c++ )آن حافظه فورا برای دوباره اختصاص دادن قادر ساخته نمی شود. به جای آن این به عنوان غیر قابل دسترس غلامت گذاری میشود و در صف بلاکهای آزاد قرار میگیرد. هدف تا حد ممکن به تعویق انداختن نکته تاحدی که حافظه آزاد شده به جریان بازگردد.

این ،شانس اینکه memcheck قادر باشد تا دسترسی های بی اغتبار را به بلاکها برای چند دوره ی قابل توجه بعداز اینکه آزاد شدند تشخیص دهد را افزایش میدهد.

این گزینه ماکزیمم اندازه ی کل بلاکها را در صف در قالب بایت مشخص میکند.مقدار پیش فرض ۲۰میلیون بایت است.افزایش این، مقدار کل حافظع استفاده شده به وسیلهmemcheck را افزایش میدهد. اما می تواند منجر شود که تشخیص استفاده های بی اغتبار بلاکهای آزادشده که بطریق دیگر غیر قابل تشخیص شوند.

نمایش بلاکهای قابل دسترسی

زمانیکه غیر فعال است ، تشخیص دهنده نشتی حافظه فقط بلاکهای«قطعا از دست رفت» و «احتمالا از دست رفت»را نمایش میدهد.وقی فعال است تشخیص دهنده ی نشتی همچنین بلاکهای «قابل دسترسی» و «بطور غیرمستقیم از دست رفت»را نشان میدهد. این همه بلاکها را به جز سرکوب شده ها نشان میدهد بنابراین نمایش همه اسم بهتری برای آن خواهد بود.

اجازه بارهای جزئی

این گزینه کنترل میکند چگونهmemcheck کلمه اندازه گیری شده ، بار کلمه هم تراز شده از آدرسهایی برای اینکه بعضی بایتها قابل آدرس دهی هستند و بقیه نیستند را مدیریت میکند

به جای آن بایتهای بارگذاری شده که از آدرسهای غیر مجاز سرچشمه میگیرند به عنوان مقداردهی نشده علامت گذاری میشوند و متناظر آنها برای آدرسهای مجاز از راه طبیعی مدیریت می شوند.زمانیکه روی نه تنظیم شود، بارهای آدرسهای تاحدی بی اعتبار مشابه بارهای آدرسهای کاملا بی اعتبارتلقی میشوند. خطای آدرس غیرمجاز صادر میشود و بایتهای نتیجه به عنوان مقداردهی شده علامتگذاری میشود.

کدی که به این روش رفتار میکند نقض کننده اسستانداردهای ISO C/C++ هستند و باید شکسته در نظر گرفته شونداگر همه ممکن باشد اینچنین کدهایی باید تعمیر شوند. این گزینه باید به عنوان آخرین پناهگاه استفاده شود.

خطای مقدار مبهم

 این گزینه کنترل میکند که ایا memcheck استفاده ها از خطاهای مقدار مبهم را گزارش میدهد. اگر شما نخواهید خطاهای مقدار مبهم را ببینید این را روی نه تنظیم کنید. این همچنین اثر وسیعی روی کمی سرعت دادن memcheck دارد.

جدول: گزینه های تنظیمات پیشرفته ایزار برای توضیح حافظه توده

Option name

Description

گروه مشخصات

این گزینه مشخص میکند که ایا توضیح دادن گروه انجام شده است

بایتهای اجرایی در هر بلاک

اگر توضیح گروه فعال باشد، این گزینه تعداد بایتهای اجرایی در هر بلاک برای استفاده را میدهد.این باید تخمینی از میانگین باشد چون این میتواند متفاوت باشد.

برای مثال، تخصیصی که به وسیله glibe روی لینوکس استفاده میشود جایی بین ۴تا۱۵ بایت ، بستگی به فاکتورهای متنوعی دارد ،در هر بلاک احتیاج دارد.آن اختصاص دهنده همچنین یه فضای مدیر برای بلاکهای آزاد شده نیاز دارد اما مانع نمی تواند برای این محاسبه نماید.

دسته توضیحات

این گزینه مشخص میکند که ایا توضیح دادن دسته ها انجام شده است. این گزینه نشان میدهد مانع به خوبی کم شده است و همچنین به طور پیش فرض خاموش شده است. مانع فرض میکند که دسته اصلی در ابتدا اندازه صفر دارد.

این درست نیست اما انجام دادن به روش دیگری حقیقتا دشوار است.علاوه براین، شروع در صفر اندازه قسمتهایی از دسته اصلی که نرم افزار کاربر درواقع بر آن کنترل دارد را بهتر نشان میدهد

تخصیص عمق درخت

بیشینه عمق درختهای تخصیص برای عکس های فوری دقیق ضبط میشوند. افزایش این مانع را مجبور میکند کندتر اجرا شود،حافظه بیشتری استفاده کند و فایلهای خروجی بزرگتری تولید کند..

آستانه تخصیص گروه

آستانه قابل توجه برای تخصیص دسته ، درصد اندازه حافظه کل است.ورودی های درخت تخصیص که برای کمتر از این محاسبه میشوند،جمع آوری شده اند.این باید پشت سر هم با گزینه های ms-print نام مشابه مشخص شده باشد.

عدم دقت اوج تخصیص

مانع الزاما اوج تخصیص حافظه سراسری واقعی را ضبط نمیکند. بطور پیش فرض این یک اوج را ضبط میکند فقط زمانیکه اندازه تخصیص حافظه سراسری حداقل ۱% از اوج قبلی تجاوز کند

این بخاطر این است که آنجا میتواند تعداد زیادی اوج تخصیص محلی در طول مسیر باشد و انجام یک عکس فوری دقیق برای هریک گران و بی فایده است. مثل همه اما یکی از آنها دیرتر دور انداخته میشود.این عدم دقت میتواند تغییر یابد(حتی به ۰%) اما مانع شدیدا کندتر اجرا می شود هرچه عدد به صفر تزدیک شود.

واحد زمان

این گزینه واحد زمانیکه برای توضیح استفاده شده است را مشخص میکند. ۳ احتمال وجود دارد:

دستورالعملها اجرا شوند

برای بیشتر موارد خوب است

زمان(به میلی ثانیه) واقعی(ساعت دیواری)

این بعضی مواقع مفید است

بایتها اختصاص یافتند/اختصاص نیافتند به گروه یا دسته

این برای برنامه های خیلی کوتاه اجرا مفید است و برای آزمایش هدفها. زیرا این در بین دستگاههای متفاوت بیشترین قالیت تجدید پذیری دارد

فرکانس عکس فوری دقیق

این گزینه فرکانس عکس فوری دقیق را مشخص میکند.با فرکانس دقیق=۱ همه عکسهای فوری دقیق میشوند

حداکثر عکسهای فوری

این گزینه بیشتر تعداد عکسهای فوری ضبط شده را مشخص میکند.اگر روی nتنظیم شود برای همه برنامه ها بجز خیلی موتاه اجراشونده ها، تعداد نهایی عکسهای فوری بین n و n/2 است.

حداقل هم ترازی بلاک گروه

بطور پیش فرض maloc والگریند، realloc و همچنین بازگرداندن یک بلاک که آدرس را شروع میکند ۸بایت هم ترازشده یا ۱۶ بایت هم تراز شده است. مقدار به سکو و رقابت پیش فرض سکو بستگی دارد.

این گزینه به شما اجازه میدهد تا یک هم ترازی متفاوت را مشخص کنید. مقدار عرضه شده باید بیشتر یا مساوی پیش فرض،کمتر یا مساوی ۴۰۹۶،و باید ضریب۲ باشد.

عملگرهای تخصیص

روشهای مشخص شده با این گزینه به عنوان روش تخصیص گروه مانند malloc تلقی میشوند. این برای روشهایی مفید است که به malloc یا جدید دسته بندی شده اند که می تواند درختهای تخصیص را با اطلاعات غیر جالب پر کند.این گزینه میتواند چندین بار روی خط فرمان برای نامگذاری چندین روش مشخص شود.

روش نامگذاری شده فقط این راه را تلقی میکند که آیا این در یک اثر دسته ورود بالاست یا فقط این روش زیر یک روش دیگر تلقی میشود.برای مثال اگر شما یک روش۱malloc دارید که malloc را پوشانده و malloc2 که malloc1 را پوشانده مشخص کردن ?alloc-fn=maloc2 اثری ندارد. همچنین شما به مشخص کردن ?alloc-fn=malloc1 نیاز دارید

این کمی نامناسب است اما دلیل این است که چک کردن برای روشهای تخصیص کند است و این زمان زیادی صرفع جویی میکند اگر مانع بتواند با دفت دیدن ورودی های اثر دسته را متوقف کند به محض اینکه یکی را پیدا کرد که تطابق نداشت به جای اینکه از طریق همه ورودی ها ادامه دهد

برای ذخیره تنظیمات روی اعمال کردن کلیک کنید

برای اجرایvalgrind روی مشخصات کلیک کنید.

نمایش نتایج valgrind

بعد از اینکه توضیح دادن حافظه منقطع شد شما می توانید نتایج توضیح دادن را ببینید

خطای حافظه و نتایج نشتی

جدول خطای حافظه نشتی های حافظه را نمایش میدهد که در حین فرایند توضیح دادن اتفاق می افتد:

  • خطای حافظه یا نشتی حافظه: نوع نشتی یا خطا
  • نام عمل:موقعیتی که خطا در آن اتفاق افتاده است
  • اندازه ها:اندازه حافظه خطا
  • آدرس:آدرس کد حافظه
  • موقعیت:منبع یا مسیر قابل اجرا یا مسیر کتابخانه که خطا در آن اتفاق می افتد
  • فرایند id
  • رشته id

اگر شما یک ورودی خطا را بسط دهید شما می توانید دسته فراخوانی روش را ببینید.

توده نتایج توضیح دادن حافظه

جدول توده نتایج توضیح حافظه توده حافظه مصرف شده واختصاص داده شده در طول فرایند توضیح دادن را نمایش میدهد.

  • عکس فوری:عدد شاخص عکس فوری
  • زمان(I ): تعداد دستورالعملهایی که اجرا شده است
  • جمع(b ): جمع اندازه بایت توده حافظه مصرف شده
  • توده مفید (b): اندازه حافظه توده استفاده شده به وسیله برنامه

توده بیشتر(b ): اندازه حافظه توده اختصاص داده شده دربیشتر از چیزی که برنامه نیاز دارد.منبع حافظه توده بیشتر عبارت است از:

    • بایتهای اجرایی بلوک حافظه توده
    • بایتهای هم راستای اندازه حافظه درخواست شده
  • دسته(b ): اندازه دسته. بطور پیش فرض، توضیح دادن دسته غیر فعال شده است چون این توضیح دادن را کند میکند.این استفاده از گزینه دسته مشخصات را فعال میکند

شکل: نتایج توضیح توده حافظه

یک عکس فوری با آیکون سبز در مقابل، یک دسته درخت با یک دسته فراخوانی دارد. روی ورودی دابل کلیک کنید تا جزئیات دسته فراخوانی را ببینید

برای اطلاعات درباره ی valgrind اجرایی در رابط خط فرمان «کتابچه راهنمای کاربر valgrind» را ببینید

نتایج مدیریت

برای ذخیره یک نتیجه توضیحvalgrind روی ذخیره فایل در نوارابزار نمایش نتیجه valgrind کلیک کنید.

برای بارگزاری یک فایل ذخیره شده نتیجه valgrind ،فایل را انتخاب کنید> بازکردن فایل در فهرست استودیوی تایزن

This content has been helpful to you?

Thanks for contributing!

Yes No

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

code