İş vaxtında RAM-ın ayrılması ilə C proqramlaşdırma dilində tərtib vaxtı arasında performans fərqi varmı?


cavab 1:

Bəli, kompilyator və əlaqələndirici, nəticədə icra olunan işləri hazırlayarkən statik yaddaş ayırmalarını da nəzərə alır, çünki tələb olunan ölçülər hamısı əvvəlcədən məlumdur və bu şəkildə ayrılmış yaddaş prosesin bütün müddəti üçün qorunur.

Bu yolla, icra edilə bilən boşluqları tərk etməkdən ibarət olan bir şeyə yaddaşın statik şəkildə ayrılması (bunlar hamısı başlanmış yaddaşın məlumat bölməsində və birləşdirilməmiş yaddaşın RSS bölməsində bir araya gəlir) hissəsi olur İş vaxtı heç bir qəbuledilməyən yerüstü proqramı yüklədikdə, icra olunan faylın yaddaşa təyin edilməsi prosesi.

İş yerində yığılmış yerdəki dinamik bölüşdürmə ilə müqayisə edin, hazırda boş əraziləri, hazırda qorunan sahələri və hər dəfə bir yaddaş tapmağı lazım olan bir ayırıcı var (yəni malloc (), calloc () və s.). Xarici parçalanmanı dayandırmağa çalışarkən müvafiq boş yer tələb olunur.

Soruşdunuz: İş vaxtında RAM ayrılması ilə C proqramlaşdırma dilində tərtib müddəti arasında performans fərqi varmı?


cavab 2:

Bəli, tərtib edərkən bunu etmək daha sürətli, ancaq asılıdır. Əsasən, tərtib müddəti iş vaxtında nə olacağını hesablamaq üçün istifadə olunur.

Bu, Mallocun birtəhər qarmaqarışıq olduğu aşağı səviyyəli sistemlərdə çox yayılmışdır. Malloc ehtiyatları və dövrlərini israf edir. Bunu tərtib vaxtında cədvələ qoysanız, bu həddən artıq puldan qaçınmaq olar.

Mən burada ümumiləşdirirəm, bəzən də onunla əlaqə qurursan. Mallocun ara qarışmasına baxsanız, bəzi təhlükələri anlamağa başlayacaqsınız. Yaddaş ayırma əməliyyatı ilə zəng etməyiniz neçə dəfə üstüörtülüyə təsir edir.


cavab 3:

Bəli, tərtib vaxt xəritələri blok əsaslıdır və idarə edilmir. İş vaxtı ayırmaları bir yığın tərəfindən təyin edilir və ümumiyyətlə sonrakı buraxılış üçün kifayət qədər izlənilir. (Ümumiyyətlə deyim ki, bölüşdürülməsi üçün fərqli istifadə nümunələrinə üstünlük verən çox müxtəlif yığın paylama alqoritmləri var.)

bu kimi

Tərtib vaxtı:

statik sətir [5000];

bir dəfə edilir, nə ayrıldığını real izləmə yoxdur, bir tətbiq işə başladıqda əvvəlcədən ayrılmış məlumat blokunun yalnız bir hissəsidir (hesab edirəm ki, yığılmış çərçivədən əvvəl yığın, məncə).

Müddət:

char * pBigString = malloc (5000);

Yerli yığın (C işləmə yığınlığı) daxil edin. Yığıncaqlar optimallaşdırılsa da, parçalana bilər və həyata keçirilməsindən asılı olaraq qısa müddət çəkir.

Tərtib olunan vaxt tapşırığının ölçüsünü dəyişə bilməzsiniz, iş vaxtı tapşırıqları istənilən ölçüdə ola bilər. Bloklarınızı təkrar istifadə edə bilərsiniz və tapşırığın icrası ilə maraqlanırsınızsa (hamısı eyni ölçüdə olduqda) bir göstərici saxlaya bilərsiniz.


cavab 4:

Faktiki yaddaşa giriş oxunur və yazılır. İş vaxtında yaddaşın ayrılması bir qədər vaxt tələb edir. (və uğursuz ola bilər!)

Yaddaş yaddaşdır. Məlumat daşıyıcıları, USB köçürmələri və s. Oxumaq və yazmaqdan daha sürətlidir. Əsas yaddaş CPU önbelleğine və qrafik kartdakı video yaddaşa nisbətən çox yavaşdır.

Beləliklə, C tərtibçiləri önbellekdə icra olunan kodu optimallaşdırırlar. Bu, kod yaradıcısının tələblərindən və aparat bilgisindən asılıdır. Buna görə tərtib edilmiş kod çox tez işləyir və düzgün ölçüdə olduqda statik olaraq ayrılmış yaddaş da önbelleğe yüklənir.

İş vaxtında ayrılmış yaddaş (dinamik yaddaş, yığma yaddaş) digərləri ilə eyni ana yaddaşda ayrılır, lakin tərtibçi tərəfindən əvvəlcədən çox yaxşı optimallaşdırıla bilməz. Yəni yığın yaddaşınızın bir neçə milisaniyəlik və ya bir neçə yüz millisaniyəlik çəkməsi və hamısı CPU önbellekine uyğun olub səliqəli bir səhifədə və ya bir neçə səhifədə olub-olmaması 50/50 ola bilər.

Beləliklə, funksiyanın nə qədər sürətli olacağını və ya işlərin o nöqtədə işləməməsi nə qədər yavaş olacağını müəyyən etmək üçün müxtəlif məlumat yükləri ilə çox sayda işləmə müddətində yaddaş saxlayan bir funksiyada sərf etdiyiniz vaxtı ortalama lazımdır. optimaldır.

Müasir masaüstü kompüterlər, serverlər, telefonlar və s. Çox istifadə olunur, çünki proqramlar resurslar və CPU vaxtını alır. Proqramınızın əməliyyat sistemi ilə əlaqə qurması və ağır yük altında yaddaş ayırmaları tələb etməsi üçün bir az vaxt tələb olunur və yaddaş yazmağa başlamazdan əvvəl dəqiq nə qədər vaxt keçəcəyini təxmin etmək olduqca çətindir.

Əməliyyat sistemləri bunu sürətləndirmək üçün bir sıra fəndlərdən istifadə edə bilər. Proqramı yaddaşa yazarkən, istədikdə və "verərkən" kopyalayabilirsiniz, ancaq proqram yalnız oxumağa və ya yazmağa çalışdıqda istifadə edə bilərsiniz.Fəal olmayan proqramların yaddaş sahələrini silmək üçün disk sənədlərindəki virtual yaddaş, aktiv proqramlardan (dəyişdirmə faylları) və s. istifadə edilə bilər

Bu, ümumiyyətlə proqramçının gördüyü və ya idarə etdiyi səviyyədən aşağı olur. Yaddaşın ən yavaş hissəsi I / O cihazıdır. Tipik olaraq, I / O cihazı ilə əldə edə biləcəyiniz ən yaxşı sürət, cihazı yaddaş timsalında olan bir FILE ilə bir tamponla xəritələmək və I / O-nı ayrı bir mövzuya dəyişdirməkdir.

Bəzi əməliyyat sistemləri hətta normal bir fayl və ya qovluq kimi istifadə edə biləcəyiniz bir yaddaş təyin edilmiş bir fayl sistemi təklif edir! (Linux-da / var / run / shm ("paylaşılan mem") qovluğu var, sadəcə bunu edə bilərsiniz - çox tez.)