Van különbség a két feltétel megadás között? For- ciklus meddig fut. (c#)
(Az esetleges elírásért bocs, jegyzettömben írtam )
c#
{
Console.Write("Kérem add meg a tömb elem számát : ");
int szam = convert.Toint32 (Console.ReadLine());
int [] tomb = new int [szam]
for (int i = 0; i < szam VAGY tomb.Lenght ;i++)
{
}
}
Most addig fut még i< szam VAGY másképp i<tomb.Lenght
ez a kettő között van valami eltérés ??
" A .NET JIT compilere nem fog index checkeket végezni, ha a teljes tömbön mész végig (for (i=0;i<tomb.Length; i++)), mert tudja, hogy ebben az esetben felesleges, úgysem lesz exception. Ezért gyorsabb, ha így van írva."
Ezzel nem mész végig a tömbön, abból hogy a ciklusok számát a tomb.Lenght hez kötöd nem következik az hogy bármit is csinálsz a tömbbel ezen túl. De ha netán mégis végigszaladnál a tömbön akkor sem egyértelmű hogy változatlan marad a mérete(mi akadályoz abban hogy a cikluson belül hozzáadj\törölj egy elemet? Ha nem ellenőrzi a tömb méretét minden iteráció elején(vagy végén) akkor ez nagyon könnyen exceptionhöz vezetne). Ha nem ellenőrizi akkor kéne neki.
#12: A tömb méretét nem lehet változtatni. Listáról nem állítottam, hogy ugyanúgy gyorsabb mint tömbre ez a speciális eset.
És való igaz, hogy nem elég a ciklusok számát nézni, valószínűleg a .NET JIT compilere azt nézni, hogy a ciklus 0-tol tomb.Lengthig megy, és ez a ciklus változó módosítás nélkül van használva a tömb indexelésénél.
Bounds-check removal cases
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!