Test: C index eller pekare
Postat: 9 juni 2023, 09:22:59
Jag har undrat vilket som är bäst att använda index array eller att använda en pekare i array'en.
Har testat på Arduino Mega 2560, Arduino IDE 1.8.16
Två loopar i testprogrammet, i första loopen tilldelas arrayen 1, 2, 3, 4...., i andra loopen summeras alla.
Tiden det tar att utföra de två looparna mäts med micros();
Så här blev resultaten:
Test med index
Sketch uses 2230 bytes of program storage space.
Global variables use 406 bytes of dynamic memory
Summa: 4950
Tid (us): 136
Test med pekare
Sketch uses 2228 bytes of program storage space.
Global variables use 406 bytes of dynamic memory.
Summa: 4950
Tid (us): 112
Fördelar och nackdelar, kommentarer ?
Andra liknande tester jag gjort tidigare:
viewtopic.php?f=43&t=85521&p=1293091#p1293091
viewtopic.php?t=81864&start=15
Programmet i sin helhet, om nån vill testa själv:
Har testat på Arduino Mega 2560, Arduino IDE 1.8.16
Två loopar i testprogrammet, i första loopen tilldelas arrayen 1, 2, 3, 4...., i andra loopen summeras alla.
Tiden det tar att utföra de två looparna mäts med micros();
Så här blev resultaten:
Test med index
Sketch uses 2230 bytes of program storage space.
Global variables use 406 bytes of dynamic memory
Summa: 4950
Tid (us): 136
Test med pekare
Sketch uses 2228 bytes of program storage space.
Global variables use 406 bytes of dynamic memory.
Summa: 4950
Tid (us): 112
Fördelar och nackdelar, kommentarer ?
Andra liknande tester jag gjort tidigare:
viewtopic.php?f=43&t=85521&p=1293091#p1293091
viewtopic.php?t=81864&start=15
Programmet i sin helhet, om nån vill testa själv:
Kod: Markera allt
// Test av index eller pekare
// Arduino Mega 2560
#include <datatyper.h>
//#define IndexTest
#define AntArr 100
char* arr[AntArr];
//---------------------setup------------------------------------------
void setup()
{
Serial.begin(9600);
uInt16 sum;
uInt32 t1;
uInt32 t2;
uInt8 a;
t1 = micros();
#ifdef IndexTest
// test med index
// init array, med 0, 1, 2, 3...
a = 0;
while (a < AntArr)
{
arr[a] = a;
a++;
}
// summera array
a = 0;
sum = 0;
while (a < AntArr)
{
sum += arr[a];
a++;
}
#else
// test med pekare
char* p;
// init array, med 0, 1, 2, 3...
p = (void*)&arr;
a = 0;
while (a < AntArr)
{
*p = a;
p++;
a++;
}
// summera array
p = (void*)&arr;
a = 0;
sum = 0;
while (a < AntArr)
{
sum += *p;
p++;
a++;
}
#endif
t2 = micros();
Serial.print("Summa: ");
Serial.println(sum);
Serial.print("Tid (us): ");
Serial.println(t2-t1);
}
//---------------------setup------------------------------------------
//---------------------loop-------------------------------------------
void loop()
{
}
//---------------------loop-------------------------------------------