[C++] Spore tablice wielowymiarowe
Ostatnio zmodyfikowano 2012-06-23 21:22
Schulze13 Temat założony przez niniejszego użytkownika |
[C++] Spore tablice wielowymiarowe » 2012-06-19 20:56:54 Witam, Od pewnego czasu nie dają mi spokoju tablice obiektów. Chce utworzyć tablice 1024 na 1024, która jak wiadomo posiada 1048576 elementów. Te natomiast posiadają 3 int'y i 1 wskaźnik do klasy, czyli obiekt liczy sobie około 16 bajtów, co daję nam 16 Mib. Lecz gdy zaczynam debuga pokazuje mi komunikat o "przepełnieniu stosu". Pytanie: Czy można i jak można zrobić "bezpieczną" tablice obiektów/wskaźników do obiektów? |
|
yoogi |
» 2012-06-19 21:11:37 Zrób może release i zobacz w menedżerze zadań ile pamięci ci aplikacja naprawdę zużywa |
|
szyx_yankez |
» 2012-06-19 21:27:04 Pokaż kod :) |
|
Schulze13 Temat założony przez niniejszego użytkownika |
» 2012-06-19 21:47:44 256 na 256 w rzeczywistości ma około 2744 Kb. Według kalkulacji powinno mieć 1024 Kb, czyli 2,5 mniej O.o . Żegnajcie wielkie miasta. Można jakoś to zoptymalizować? cCity.h #pragma once #include <SFML/Graphics.hpp> #include <iostream> #include <vector> #include <new.h>
#include "cBlok.h" #include "cBudynek.h"
#define size 256
class cCity { public: cCity( sf::RenderWindow & oknoApp, sf::Vector2f & mysz ) { ptrB = NULL; for( int i = 0; i < size; i++ ) { for( int j = 0; j < size; j++ ) { mapa[ i ][ j ] = new cBlok( i, j ); } } ptrB = new cBlok( 0, 0 ); std::cout << "\ngotowe mapa ma " << sizeof( * mapa ) << " bajtow\npole ma " << sizeof( * ptrB ) << " bajtow"; delete ptrB; ptrB = NULL; } virtual ~cCity( void ) { } void outOfMemory() { std::cout << "Brak pamieci - to straszne, co nie?"; } void pokaz( sf::RenderWindow & oknoApp ) { for( int i = 0; i < size; i++ ) { for( int j = 0; j < size; j++ ) { mapa[ i ][ j ]->pokaz(); } } } private: cBlok * ptrB; cBlok * mapa[ size ][ size ]; cBudynek * ptrH; std::vector < cBudynek > budynki; }; cBlok.h #pragma once #include <SFML/Graphics.hpp> #include <iostream>
#include "cBudynek.h"
class cBlok { public: cBlok( int x, int y ) { } virtual ~cBlok( void ) { } void pokaz() { } private: int myX; int myY; int wysokoscBlok; }; |
|
yoogi |
» 2012-06-19 22:31:51 Wiesz, w pamięci procesu nie są tylko zmienne, jest wiele innych rzeczy które tam się wrzuca :) |
|
Schulze13 Temat założony przez niniejszego użytkownika |
» 2012-06-19 22:33:20 No fakt... Jakieś propozycje? |
|
Drraven |
» 2012-06-20 12:13:23 Może std:vector?, chyba można 16mib zrobić Albo mapy w ostateczności listy, ale to raczej mordęga by była.
|
|
DejaVu |
» 2012-06-20 12:44:38 Poczytaj o dynamicznej alokacji pamięci. |
|
« 1 » 2 |