Großes Array/Stack Overflow
-
Ich versuche folgendes zu tun:
long *pnPixel[960000];
Dabei gibt es einen Stack Overflow. Jetzt kann man ja mittels /Z laut der Doku die Stack-Größe einstellen. Die Frage ist wie groß ist ein Pointer auf ein Long und was für ein Wert ist da sinnvoll?
-
Pointer sind immer gleich groß.
Ich würde das Array aber mit new auf den Heap legen, das erscheint mir sinnvoller.
-
Erstmal meine ich muss der * weg.
long pnPixel[960000];Allerdings wird das so auf dem Stack angelegt.
Also solltest Du lieber dynamisch das Array anlegen.long *pxPixel = new long[960000];
und am Ende das Aufräumen nicht vergessen:
delete[] pxPixel;
Stackgröße verändern ist nicht unbedingt der richtige Weg.
-
Ich brauch aber keinen Pointer auf ein Array mit 960k Einträgen, sondern 960k Pointer in einem Array
/Edit: Hab´s gelöst mit EditBin
-> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_.2f.stack_editbin.asp
-
Man benutzt ja auch std::vector<> für sowas!
Hier gibts Infos:
http://www.kharchi.de/cppratgeber2.htm
-
Das hat schon seinen Grund warum ich das genau so mache und nicht mit einem Vector, aufm Heap oder sonstwas.
-
asdrubael schrieb:
Das hat schon seinen Grund warum ich das genau so mache und nicht mit einem Vector, aufm Heap oder sonstwas.
Interessehalber, welchen Grund gibts denn
, ausser nem Designfehler.
-
Ich nutze eine C API und die erwartet ein Array. Ich programmiere hier keine Uni-Studien oder Tic Tac Toe Spiele wo ich mir das Schönste aussuchen kann.
-
Und wo ist das Problem, deiner C Funktion das Array aus dem Vector zu übergeben?
// Eine C Funktion: void function(long *p, int size);
std::vector<long> vec(960000, 0); vec[0] = 1000; function(&(vec.front()), vec.size());
-
*edit* Schluss hier das Thema ist erledigt.
-
*begründ*
#include "windows.h" #include <vector> #include <iostream> using namespace std; // For-Scope Hack für VC 6 #define for if(false);else for int main() { vector<long> vecPixel(960000, 0); LARGE_INTEGER before; LARGE_INTEGER after; int nPixelCounter = 0; int nSizeX = 1600; int nSizeY = 1200; QueryPerformanceCounter (&before); for (int i = 0; i<nSizeX; i+=2) { for (int y = 0; y <nSizeY; y++) { vecPixel[nPixelCounter] = vecPixel[0]; nPixelCounter++; } } QueryPerformanceCounter (&after); LARGE_INTEGER freq; QueryPerformanceFrequency (&freq); double nTimer = ((after.QuadPart - before.QuadPart) * 1000) / freq.QuadPart; cout << "Vektor hat gebraucht: " << nTimer << " ms \n"; long szPixel[960000]; nPixelCounter = 0; QueryPerformanceCounter (&before); for (int i = 0; i<nSizeX; i+=2) { for (int y = 0; y <nSizeY; y++) { szPixel[nPixelCounter] = szPixel[0]; nPixelCounter++; } } QueryPerformanceCounter (&after); QueryPerformanceFrequency (&freq); nTimer = ((after.QuadPart - before.QuadPart) * 1000) / freq.QuadPart; cout << "Array hat gebraucht: " << nTimer << " ms \n"; return 0; }
Kann ja jeder selbst ausprobieren, vielleicht hat sich auch ein Fehler eingeschlichen oder er optimiert da was weg aber ich denke nicht.