Şəxsi baytlar, virtual baytlar, iş qurğusu nədir?

Sürecinde yaddaş sızıntılarını debug etmək üçün mükəmməllik proqramını istifadə etməyə çalışıram.

Burada şərtləri necə izah edir?

İşçi dəsti - bu prosesin işçi dəstinin baytlarında hazırkı ölçüsü. İşçi dəsti yaxınlarda proses mövzularından təsirlənən bir neçə yaddaş səhifəsidir. Əgər kompüterin sərbəst yaddaşı ərəfəsini aşsa, səhifələr istifadəsi olmadıqda belə prosesin işləmə dəstində qalır. Pulsuz yaddaş eşikin altına düşəndə, səhifələr işçi qruplarından çıxarılır. Lazım gələrsə, əsas yaddaşı buraxmadan əvvəl işləmə dəstinə yumşaq bir səhv ilə dönəcəklər.

Virtual bayt , bu prosesin istifadə etdiyi virtual ünvan alanının baytlarında mövcud olan ölçüsüdür. Sanal bir ünvan alanının istifadəsi disklərin və ya əsas yaddaşın müvafiq istifadə edilməsini nəzərdə tutmur. Virtual məkan əlbəttə ki, proses kütüphanələri yükləmək qabiliyyətini məhdudlaşdıra bilər.

Şəxsi baytlar bu müddətdə ayrılan yaddaşın baytlarında mövcud olan ölçüsüdür və digər proseslərlə paylaşıla bilməzlər.

Bunlar mənim suallarımdır:

Bu, hər hansı bir paylaşılan kitabxanaya daxil olmadığı üçün, prosesin sızması olduğundan əmin olmaq üçün ölçmək üçün lazım olan xüsusi bir bayt mıdır və bu baş verərsə, hər hansı sızıntı prosesin özü olacaq?

Prosesi istehlak edilən ümumi yaddaş nədir? Bu virtual bayt mı və ya virtual bayt və işçi dəsti məbləğidir?

Şəxsi bayt, iş seti və virtual bayt arasında əlaqə varmı?

Yaddaş istifadəsi barədə daha yaxşı bir fikir verən digər vasitələr varmı?

382
31 дек. pankajt tərəfindən 31 dekabrda təyin olundu . 2009-12-31 09:16 '10 at 9:16 AM 2009-12-31 09:16
@ 4 cavab

Bu sualın qısa cavabı , bu dəyərlərdən heç biri yerinə yetirilməmiş fayl tərəfindən həqiqətən istifadə olunan yaddaşın etibarlı bir göstəricisidir və bunlardan heç biri yaddaş sızmalarını pozmaq üçün uyğun deyildir.

Şəxsi bayt prosesin yerinə yetirilməsini tələb etdiyi yaddaş məbləğinə aiddir - bu, həqiqətən, nə qədər istifadə etməsidir. Onlar (adətən) yaddaş eşleme (yəni paylaşılan DLL'ler) olan faylları istisna olmaqla, "gizli" olurlar. Amma burada tutmaq - bu fayllar tərəfindən ayrılan yaddaşları mütləq istisna etmir. Şəxsi baytlarda dəyişikliklərin yürütülebilir faylın özü və ya əlaqəli kitabxana olması səbəbindən olub olmadığını müəyyən etmək mümkün deyil. Şəxsi baytlar da yalnız fiziki yaddaş deyil; diskə və ya yedek səhifələrin siyahısına (məsələn, artıq istifadə edilmir, lakin hələ yüklənməmiş) yüklənə bilər.

İşçi dəsti prosesdə istifadə edilən ümumi fiziki yaddaşa (RAM) istinad edir. Buna baxmayaraq, xüsusi baytlardan fərqli olaraq, bu yaddaş eşleme faylları və digər müxtəlif resursları ehtiva edir, belə ki, bu, xüsusi baytlara nisbətən daha az dəqiqdir. Task Manager "Mem Usage" də bildirilən eyni dəyərdir və son illərdə sonsuz qarışıqlıq mənbəyinə çevrilmişdir. İş kümesindəki yaddaş "fiziki" deyildir ki, bu, səhifə çatışmazlığı olmadan həll edilə bilər; Lakin, yedek səhifələrin siyahısı hələ də fiziki olaraq yaddaşda deyil, iş qurğusunda bildirilmir, ona görə də ərizə minimuma endirərkən birdən "Mem Usage" istifadə edərək dayandırıla bilərik.

Virtual baytlar , bütün proses tərəfindən işğal edilən ümumi virtual ünvanıdır. Bu yaddaş dəstəyi faylları (paylaşılan DLL) ehtiva edən mənada iş qutusuna bənzəyir, həm də zəmanət siyahısında olan məlumatları və artıq yüklənmiş və diskdə disk yaddaşında olan bir yerdə olan məlumatları ehtiva edir. Ağır yük altında olan sistemdə hər bir prosesin istifadə etdiyi ümumi sanallaşdırılmış baytlar əslində olduğundan daha çox yaddaş ehtiva edir.

Beləliklə, əlaqələr:

  • Şəxsi baytlarınız tətbiqinizin həqiqətən ayrılanlarıdır, ancaq disk yaddaşının faylını istifadə etməyə imkan verir;
  • İşçi dəsti şifrələnməmiş xüsusi bayt plus yaddaş eşlenen fayllardır;
  • Virtual baytlar bir iş seti plus fərdi baytlar və bir yedek siyahısıdır.

Burada başqa bir problem var; Paylaşılan kitabxanalar ərizə modulunuzda yaddaş ayıra bilərlər. Çünki Şəxsi Bytes proqramında göstərildiyi kimi potensial yalan pozitiflərə gətirib çıxara bilər, ərizə yaddaşınızdakı paylaşılan modullar daxilində saxta yanlışlara yol açacaq yaddaş ayıra bilər. Bu demək olar ki, tətbiqdə xüsusi baytlarda görünməyən yaddaş sızması ola bilər. Çətin, lakin mümkün.

Şəxsi baytlarınız, yürütülebilir faylınızın istifadə etdiyiniz yaddaş miqdarının makul bir yaxınlaşmasıdır və potensial yaddaş sızması namizədlərinin siyahısını daraltmak üçün istifadə edilə bilər; Bu rəqəmin davamlı və sonsuz böyüdüyünü və böyüdüyünü görsəniz, bu prosesi sızmalar üçün yoxlamaq istərdiniz. Bununla belə bir sızıntının olmadığını sübut edə bilməz.

Windows'dakı yaddaş sızmalarını aşkarlamaq / düzəltmək üçün ən təsirli vasitələrdən biri əslində Visual Studio'dur (link, məhsul səhifələrinə deyil, yaddaş sızıntısı üçün VS istifadə səhifəsinə gedir). Rational Purify bir başqa imkanıdır. Microsoft, bu mövzuda daha yaxşı tətbiqlərin daha ümumi bir siyahısına sahibdir. Bu əvvəlki sualda əlavə alətlər var.

Ümid edirəm ki, bu, bəzi şeyləri aydınlaşdırır! Yaddaş sızıntısını izləmə, debug etmək üçün ən çətin vəzifələrdən biridir. Uğurlar.

395
31 дек. Cavab Aaronaught tərəfindən verilir 31 dekabr. 2009-12-31 21:11 '10 at 21:11 2009-12-31 21:11

Xətt sızmalarını aşkar etmək üçün perfmon, tapşırıq meneceri və ya hər hansı bir vasitəni istifadə etməyiniz lazım deyil. Onlar tendensiyaları müəyyənləşdirməkdə yaxşıdır, lakin daha çox. Onlar mütləq hesabat verdikləri nömrələr çox qeyri-müəyyəndir və bir yaddaş sızıntısının aşkarlanması kimi müəyyən bir tapşırıq üçün faydalı ola bilər.

Bu sualın əvvəlki cavabı müxtəlif növlərin nə olduğunu açıqladı.

Bir alət tövsiyəsini soruşursunuz: Mən Yaddaş Validatorı məsləhət görürəm. Milyardlarla yaddaş ayırmalarını təmin edən tətbiqləri izləmək imkanı.

border=0

http://www.softwareverify.com/cpp/memory/index.html

Disclaimer: Mən Yaddaş Validator yaratdım.

9
05 февр. Stephen Kellettə cavab 05 fevral. 2010-02-05 20:25 '10 at 8:25 pm 2010-02-05 20:25

Burada maraqlı bir müzakirə: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/307d658a-f677-40f2-bdef-e6352b0bfe9e/ Bu mövzuda mənim anlayışım kiçik dağılımların azad edilməməsidir Şəxsi baytlarda və ya iş yerində.

Qısacası:

əgər çağırsam

 p=malloc(1000); free(p); 

sonra xüsusi baytlar azadlığı deyil, yalnız ayırmağı əks etdirir.

əgər çağırsam

 p=malloc(>512k); free(p); 

sonra xüsusi baytlar paylanması və sərbəst buraxılmasını düzgün əks etdirir.

5
28 апр. cavab mcanti verildi 28 Apr 2011-04-28 11:39 '11 at 11:39 2011-04-28 11:39

Mükəmməl sayğacların tərifi ən başdan sarsıldı və bir səbəblə düzəldilməsi çox çətin görünürdü.

MSDN video " Memory Management Secrets" də yaddaş yaddaşının sızması (məsələn, işçi dəstlərinin idarə edilməsi) üçün lazım olanların daha çoxunu əhatə edir, lakin müvafiq mövzularda kifayət qədər ətraflı məlumat verir.


Sizə mükəmməl qarşılıqlı təsvirlərlə bağlı bir işarə vermək üçün, " şəxsi bayt performans counter - heware! " Dən xüsusi baytlar haqqında daxili bir hekayə var MSDN:

S: Xüsusi bir bayt xüsusi bir bayt zaman deyil?

A: Sakin deyilsə.

Şəxsi bayt sayğacları törətmə prosesini bildirir. Yəni, əvəz edildikdə fərdi yaddaş məzmununun saxlanması üçün yaddaş faylında ayrılmış məkan. Qeyd Mən icra edilməyən qorunan bir vəziyyətdə virtual yaddaşla mümkün olan bir qarışıqlıqdan ötrü "qorunub" sözünü çəkməmişəm.


MSDN-də " Performans Planlaması " dan:

3.3 Şəxsi baytlar

3.3.1 Təsvir

Xüsusi yaddaş, digər proseslərdən istifadə edilə bilməyən bir müddət üçün ayrılmış yaddaş kimi müəyyən edilir. Bir neçə bu proses bir maşında işləyərkən bu yaddaş paylaşılan yaddaşdan daha bahalıdır. (Ənənəvi) idarə edilməmiş DLL-lərdə xüsusi yaddaş adətən C ++ statics və ümumi iş dll setinin təxminən 5% -ni təşkil edir.

4
13 нояб. Cavab 13 noyabr tarixində verilir. 2014-11-13 04:17 '14 da 4:17 2014-11-13 04:17