Tömb mérete?


2014-11-01 00:18:24

Mekkora méretű tömböt C-ben létrehozni?

Egész idáig nem hozott össze az élet olyan feladattal, mikor szándékosan nagy méretű tömböt kellett létrehozni. Kérdés nélkül hoztam létre egy tetszőleges elemszámú tömböt, és próbáltam bele adatot (szürkeárnyalatos kép pixeleinek a színértékét) beletölteni, de a program, (verem) memória túlcsordulás hibával kivételt dobott.

Ekkor jött az utánajárás. Mivel "prog1"-ből nem mertült elő ilyen kérdés, és feltételezhetően én is el fogom felejteni, elndötöttem nem folytom magamba, megosztom az információt. 

There are two places memory can be allocated:

  • On the heap (dynamically allocated memory).
    The size limit here is a combination of available hardware and the OS's ability to simulate space by using other devices to temporarily store unused data (i.e. move pages to hard disk).
  • On the stack (Locally declared variables).
    The size limit here is compiler defined (with possible hardware limits). If you read the compiler documentation you can often tweak this size.

Thus if you allocate an array dynamically (the limit is large and described in detail by other posts.

int* a1 =newint[SIZE];// SIZE limited only by OS/Hardware

Alternatively if the array is allocated on the stack then you are limited by the size of the stack frame. N.B.vectors and other containers have a small presence in the stack but usually the bulk of the data will be on the heap.

int a2[SIZE];// SIZE limited by COMPILER to the size of the stack frame

Azaz ha sima változót hozunk létre, az bizony a verem(stack) memórából fogja a helyet rabolni. Ha mutatót hozunk létre és neki foglalunk le X helyet, akkor az a halom (heap) memóriából fog lefoglalásra kerülni. 

Egy gyors tesztet végeztem is azóta, 1000 millió elemű (char*) tömböt hoztam létre, és valóban a memóriahasználata 1GB volt :)
Sima (char) változó létrehozása esetén 256KB méret (256 000 elemű tömb) fölött adta be a kulcsot. Ez normál használat mellett elegendőnek kell legyen, de ha olyan igényeink vannak, hogy a verembe képet szeretnénk tárolni, akkor 500*500 pixelesnél nagyobbat ne válasszunk...
 







Hozzászólások:


Hozzászólás beküldése (nyisd le)