Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Spore tablice wielowymiarowe

Ostatnio zmodyfikowano 2012-06-23 21:22
Autor Wiadomość
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?
P-58721
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
P-58725
szyx_yankez
» 2012-06-19 21:27:04
Pokaż kod :)
P-58728
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
C/C++
#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 )
    {
        //set_new_handler( outOfMemory() );
        ptrB = NULL;
       
        for( int i = 0; i < size; i++ )
        {
            for( int j = 0; j < size; j++ )
            {
                //ptrB = new cBlok( i, j );
                mapa[ i ][ j ] = new cBlok( i, j );
                //ptrB;
               
                //ptrB = NULL;
            }
        }
        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
C/C++
#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;
   
    //cBudynek * budynek;
   
};
P-58729
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 :)
P-58731
Schulze13
Temat założony przez niniejszego użytkownika
» 2012-06-19 22:33:20
No fakt... Jakieś propozycje?
P-58732
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.

P-58742
DejaVu
» 2012-06-20 12:44:38
Poczytaj o dynamicznej alokacji pamięci.
P-58745
« 1 » 2
  Strona 1 z 2 Następna strona