C çeteleler tamsayılar kullanımı daha yavaş?
Çok basit bir sorun var :
Git bir programı kaydediyorum. QVector<int> veya bir yönetim kurulu ile temsil QVector<Player> nereye
enum Player
{
EMPTY = 0,
BLACK = 1,
WHITE = 2
};
Tabii ki, tam sayılar yerine Oyuncu daha yavaş olacak sanırım. Ama ne kadar, enum kullanarak daha iyi bir kodlama olduğunu düşünüyorum çünkü merak ediyorum.
Ve Oyuncular int (karşıt olarak) atama karşılaştırılması ile ilgili birkaç test yaptım
QVector<int> vec;
vec.resize(10000000);
int size = vec.size();
for(int i =0; i<size; i)
{
vec[i] = 0;
}
for(int i =0; i<size; i)
{
bool b = (vec[i] == 1);
}
QVector<Player> vec2;
vec2.resize(10000000);
int size = vec2.size();
for(int i =0; i<size; i)
{
vec2[i] = EMPTY;
}
for(int i =0; i<size; i)
{
bool b = (vec2[i] == BLACK);
}
Temelde, sadece daha yavaş. Devam etmeden önce Bilmem Gereken başka bir şey var mı?
Teşekkürler!
Edit: fark değil benim hayal gücünün bir ürünü, belirli Qt ve Deyişle görünüyor. Std kullandığımda::vektör, hız aynı
CEVAP
Çeteleler tamamen zaman (tamsayı sabitler, değişkenler tamsayı numaralandırma değişkenleri olarak numaralandırma sabitler) derleme çözülür, bunları kullanarak hız cezası yok.
Genel ortalama numaralandırma olmayacak bir temel türü daha büyük int (sürece size koymak çok büyük sabitler); gerçekleri, §7.2 ¶ 5 açıkça söyledi:
Bir numaralandırmanın arka plandaki türünü tüm numaralandırma değerleri numaralandırma tanımlanan temsil edebilecek ayrılmaz bir türüdür. Bir numaralandırma için temel türü olarak kullanılan bir uygulama tanımlıbunun dışında temel türü
intbüyük olamazintunsigned intsayacı bir uyum değerini sürece.
Bunlar genellikle kod okumak ve korumak için daha kolay çünkü yeri gelince numaralandırma kullanmak gerekir (hiç bir program tam hata ayıklama için denediniz mi "sihirli sayı"? :S).
Sonuçlar gelince: muhtemelen test metodolojisi dikkate kodu çalıştırdığınızda olsun normal hızda dalgalanmalar "" makineleri . normal almaz ^sup>1sınav çok (100 ) kez çalıştıran çalıştı ve hesaplama ve kez standart sapma demek? Sonuçlar uyumlu olmalıdır: ortalamalar arasındaki fark 1 ya da 2 kez RSS daha büyük olmamalı2iki standart sapma (her zamanki gibi varsayarak, dalgalanmalar için Gauss dağılımı).
Yapabileceğin başka bir onay üretilen assembly kodu (g -S anahtarı ile ulaşabilirsiniz) karşılaştırmak için.
- "Normal" bazı indeterministic dalgalanmalar var PC yüzünden diğer görevleri çalışan, önbellek/RAM/VM devlet, ..
- Kök Sum Kare, Kare, standart sapmaların toplamının kare kökü.

Çok yavaş gölgede daha duyarlı hale ge...
Neden yok C# Matematik yürütmek.() Kar...
Neden bazı yüzer < karşılaştırmalar...
Neden küçük bir liste daha küçük bir d...
Neden C 11 bu kodu içeren rand() ile b...