TheXpert : dinamik bir dizinin daha fazla kontrolü var, Renat bir keresinde yazmıştı, bir gönderi bulamıyorum, sadece dizine göre erişim hakkında bir konuşmada, neden artılardan çok daha yavaş
Dinamik dizileri doldururken, önce statik olanları doldurmanın ve ardından ArrayCopy'yi dinamik dizilere dönüştürmenin daha iyi olduğu ortaya çıktı.
Statik bir diziden dinamik bir dizi yaptınız. Dolayısıyla ortaya çıkan tüm problemler:
int a[][ 100 ];
ArrayResize (a, 100 );
ZeroMemory (a);
// Первый цикл
for ( int i; i < 100 ; ++i)
{
for ( int n; n < 100 ; ++n)
{
a[i][n]++;
}
}
// Второй цикл
for ( int n; n < 100 ; ++n)
{
for ( int i; i < 100 ; ++i)
{
a[i][n]++;
}
}
Birinci ve ikinci döngüler farklı hızlarda çalıştığında.
peki, genellikle bir kez başlatılır ve çoğu zaman hız konusunda endişelenmenize gerek yoktur. (artı bellek yükü)
ancak dizinlere sürekli erişim varsa ve vakaların ~ %99,9'unda dizinin maksimum boyutu biliniyorsa, dinamik diziyi değiştirmek için statik bir dizinin etrafına kendi basit sarmalayıcınızı yazmak mantıklı olabilir.
peki, genellikle bir kez başlatılır ve çoğu zaman hız konusunda endişelenmenize gerek yoktur. (artı bellek yükü)
Keneler ayrıştırılırken kaydım yavaşlıyor. On milyonlarca var, bu yüzden önemli.
ancak dizinlere sürekli erişim varsa ve vakaların ~ %99,9'unda dizinin maksimum boyutu biliniyorsa, dinamik diziyi değiştirmek için statik bir dizinin etrafına kendi basit sarmalayıcınızı yazmak mantıklı olabilir.
Okurken bir sarmalayıcı yapmanın mantıklı olması mümkündür.
Tehdit Okuma hızlanamadı
long ArraySum1( int &Array[] )
{
long Sum = 0 ;
constint Size = ArraySize (Array);
for ( int i = 0 ; i < Size; i++)
Sum += Array[i];
return (Sum);
}
#define ARRAY_SIZE 100000long ArraySum2( int &Array[] )
{
long Sum = 0 ;
constint Size = ArraySize (Array);
int ArrayStatic[ARRAY_SIZE];
for ( int i = 0 ; i < Size;)
{
constint Size2 = i + ARRAY_SIZE < Size ? ARRAY_SIZE : Size - i;
ArrayCopy (ArrayStatic, Array, 0 , i, Size2);
for ( int j = 0 ; j < Size2; j++)
Sum += ArrayStatic[j];
i += Size2;
}
return (Sum);
}
#define BENCH(A) \
{ \
constulong _StartTime = GetMicrosecondCount (); \
A; \
Print ( "Time[" + #A + "] = " + ( string )( GetMicrosecondCount () - _StartTime)); \
}
voidOnStart ()
{
int Array[];
ArrayResize (Array, 1 e8);
ArrayInitialize (Array, 1 );
BENCH( Print (ArraySum1(Array)));
BENCH( Print (ArraySum2(Array)));
}
Aklıma orijinal fikri getirdim (ilk kodda adresleri yanlış saydım). Zorlaştırmıyorsa, sonucu sizin için görmek ilginç olacaktır.
Dağılım, fırlatmadan fırlatmaya güçlü, fark bir yönde sabit, görünmez. Tabii ki, Sürüm sürümünü çalıştırıyorum.
dinamik bir dizinin daha fazla kontrolü var, Renat bir keresinde yazmıştı, bir gönderi bulamıyorum, sadece dizine göre erişim hakkında bir konuşmada, neden artılardan çok daha yavaş
Dinamik dizileri doldururken, önce statik olanları doldurmanın ve ardından ArrayCopy'yi dinamik dizilere dönüştürmenin daha iyi olduğu ortaya çıktı.
Bu frenler ne için?
Statik bir diziden dinamik bir dizi yaptınız. Dolayısıyla ortaya çıkan tüm problemler:
Birinci ve ikinci döngüler farklı hızlarda çalıştığında.
Teşekkür ederim. Garip tabii. Stabil bir farkım var.
Teşekkür ederim. Garip tabii. Kararlı bir farkım var.
Dinamik dizileri doldururken, önce statik olanları doldurmanın ve ardından ArrayCopy'yi dinamik dizilere dönüştürmenin daha iyi olduğu ortaya çıktı.
Ve orada!
Ve orada!
peki, genellikle bir kez başlatılır ve çoğu zaman hız konusunda endişelenmenize gerek yoktur. (artı bellek yükü)
ancak dizinlere sürekli erişim varsa ve vakaların ~ %99,9'unda dizinin maksimum boyutu biliniyorsa, dinamik diziyi değiştirmek için statik bir dizinin etrafına kendi basit sarmalayıcınızı yazmak mantıklı olabilir.
peki, genellikle bir kez başlatılır ve çoğu zaman hız konusunda endişelenmenize gerek yoktur. (artı bellek yükü)
Keneler ayrıştırılırken kaydım yavaşlıyor. On milyonlarca var, bu yüzden önemli.
ancak dizinlere sürekli erişim varsa ve vakaların ~ %99,9'unda dizinin maksimum boyutu biliniyorsa, dinamik diziyi değiştirmek için statik bir dizinin etrafına kendi basit sarmalayıcınızı yazmak mantıklı olabilir.
Okurken bir sarmalayıcı yapmanın mantıklı olması mümkündür.
Tehdit Okuma hızlanamadı
Ve orada!
benim fillarray1 biraz daha hızlı
ve okumada sorun var
benim fillarray1 biraz daha hızlı
Yayın sürümünü çalıştırıyorum. Optimizasyon etkinleştirildi.