webForumDet fria alternativet

Flerdimensionella vektorer på heapen.

C/C++

4 svar · 242 visningar · startad av Reza

Medlem sedan feb. 2001107 inlägg
Frågan#1

Jag vill skapa flerdimensionella vektorer på heapen.
Är Exempel 1 samma sak som Exempel 2, om ja vilket är att föredra.

Exempel 1:

int* a[10];

for(i = 0; i < 10; i++)
   a[i] = new int[5];

a[2][3] = 3;

Exempel 2:

int* b[10][5];

for(i = 0; i < 10; i++)
   for(j = 0; j < 5; j++)
      b[i][j] = new int;

*b[2][3] = 4;
Medlem sedan maj 20021 466 inlägg
#2

Nej, det är inte samma sak.
Det fungerar ungefär så här:

Exempel 1:
a[0-9] -> a[0-4] . int

Exempel 2:
b[50] -> int

I första exemplet skapar du 10 pekare som pekar på 5 integers. I andra exemplet skapar du 50 pekare som pekar på integers.

Det första exemplet är att föredra, eftersom du bara allokerar på heapen 10 gånger, mot 50 gånger i andra exemplet. Fast egentligen är de lika dåliga båda två. Det bästa är att inte allokera på heapen, eller att endast göra det en gång.

// Stacken
int a[10][5];
// Heapen (en allokering)
int (*b)[5] = new int[10][5];

Medlem sedan nov. 200114 inlägg
#3

Det borde du fattat Reza min gamle käre elev!!! ;)

Medlem sedan okt. 20013 217 inlägg
#4

Prestandamässigt så brukar det alltid löna sig att skapa en pool av någonting då man väl allokerar minne för att sedan ta av denna pool. Minnesallokering är rätt så krävande operation och det tar nog inte så mycket längre tid att allokera 1 byte eller 5 byte. Däremot tar det tid att allokera 1 byte 5 gånger istället för att allokera 5 byte 1 gång.

Medlem sedan feb. 20001 590 inlägg
#5

Ytterligare lite info (något som "normala" programmerare inte behöver tänka på), är om man allokerar stora mängder minne, så kan detta minne efter ett tag bli "utswappat" på hårddisken, och kan orsaka en liten tidsfördröjning när data skall "hämtas".

Detta är ytterst ovanligt, och dyker som sagt upp vid stora allokeringsmängder, och program som sällan anropar dessa.

/T

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)