CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Maxymalny rozmiar tablicy

Maxymalny rozmiar tablicy

dział ogólny

Maxymalny rozmiar tablicy

Nowy postprzez Corvis » wtorek, 30 lipca 2013, 22:29

Witam,

Mam małą zagwozdkę,

Zrobiłem sobie klasę:
KOD cpp:     UKRYJ  
class TTik {
        private:

        public:
                TDateTime dataGodzina;
                float wartosciDanych[20];
                TTik();
                ~TTik();
};
 


I teraz chciałbym zadeklarować maxymalnie dużą tablicę danych np.

KOD cpp:     UKRYJ  
TTik *tablicaTikow = new TTik[MAX_LICZBA];


No i tutaj moje pytanie jak mogę sprawdzić jaki mogę zrobić max rozmiar tablicy ??

Wstawiając na sztywno np 9 000 000 działało, ale jak zacząłem rozwijać kod miałem błąd std::bad_alloc.

Z góry dzięki za info,
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez Cyfrowy Baron » środa, 31 lipca 2013, 00:30

Spróbuj tego:

KOD cpp:     UKRYJ  
// bad_alloc example
#include <iostream>     // std::cout
#include <new>          // std::bad_alloc

int main () {
  try
  {
    int* myarray= new int[10000];
  }
  catch (std::bad_alloc& ba)
  {
    std::cerr << "bad_alloc caught: " << ba.what() << '\n';
  }
  return 0;
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » środa, 31 lipca 2013, 07:04

No to tak, tylko, że jak wywali mi ten wyjątek to skąd mam wiedzieć jakiej maxymalnej wielkości tablicę mogę utworzyć ?
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez Cyfrowy Baron » środa, 31 lipca 2013, 08:07

Trzeba by sprawdzić w dokumentacji, gdyż nie ma takiej możliwości, żeby zwróciło maksymalny rozmiar tablicy.
Może jednak błąd nie bierze się u ciebie z rozmiaru tablicy, ale dlatego, że próbujesz alokować jej rozmiar nie na sztywno lecz dynamicznie?!
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » środa, 31 lipca 2013, 08:34

Możesz sprawdzić u siebie ile możesz zrobić max rozmiar tablicy ???

Jak robię statycznie to mam OUT OF MEMORY :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez polymorphism » środa, 31 lipca 2013, 10:14

Maksymalny rozmiar tablicy przydzielonej na stercie zależy od dostępności żądanego zakresu pamięci wirtualnej, ergo: jeśli masz pofragmentowaną pamięć lub po prostu alokujesz zbyt duży blok pamięci, to menadżer pamięci nie będzie mógł znaleźć odpowiednio wielkiego, ciągłego bloku pamięci wirtualnej, i wtedy dostajesz wyjątek bad_alloc. To wcale nie oznacza, że Twoja aplikacja nie ma żadnej wolnej pamięci, cały czas mogą być dostępne małe bloki pamięci. 32-bitowe aplikacje mają 2GB przestrzeń adresową na własny użytek, niezależnie od tego, czy sprzęt taką ilość pamięci fizycznej posiada.

O stosie nie będę nic pisał, bo generalnie dużych tablic nie tworzy się na tym typie pamięci.

p.s. po co Ci taka duża tablica?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » środa, 31 lipca 2013, 10:33

Mam duże pliki danych CSV do analizy i nie bardzo wiem jak je wczytać. Mają po 150 MB .

Najgorzej, że muszę to potem narysować.

Myślałem o wczytywaniu danych w kawałkach ale na koniec i tak muszę mieć przeliczenie i wykres z całości :/
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez polymorphism » środa, 31 lipca 2013, 10:40

150MB to nie tak dużo jak na dzisiejsze standardy, więc problemu nie powinno być, chyba że pracujesz na jakimś prehistorycznym sprzęcie, którym fizycznie nie ma tyle wolnej pamięci.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » środa, 31 lipca 2013, 10:44

1. Procek Intel Core i7-2600K, 3.40GHz, 8MB, LGA1155, 32nm, 95W, BOX
2. Gigabyte GA-Z68X-UD3H-B3, Z68, DDR3-1600, 3xSATA2, 4xSATA3, RAID, D-SUB, ATX
3. Patriot Viper Xtreme Series Division 2, 1600MHz, 2x4GB, DDR3,
CL8-9-8-24, XMP, 1.65V
4. Dysk Seagate Barracuda 7200.12, 3.5'', 1TB, SATA/600, 7200RPM, 32MB cache
5. Obudowa ATX AEROCOOL PGS Vx-9 PRO BATTLE EDITION, 0.6 SECC, bez zasilacza
6. Gigabyte GeForce GTX 460 V2, 1GB DDR5 (192 Bit), mHDMI, DVI-I, BOX
7. ASUS Napęd DVD -/+RW , Lightscribe 24x( czarny panel), SATA, retail
8. Microsoft OEM Windows 7 Professional SP1 64 bit, Polish, 1pk, DVD
9. OCZ TECHNOLOGY zasilacz ModXStream Pro 700W

Raczej powinno dać radę :/
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez polymorphism » środa, 31 lipca 2013, 10:46

I co, 150MB nie możesz przydzielić?! Ewidentnie robisz coś nie tak...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » środa, 31 lipca 2013, 10:46

nie :/
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez Cyfrowy Baron » środa, 31 lipca 2013, 11:02

Tworzysz tablicę z klasy która też zawiera tablicę i alokuje ją dla 20 zmiennych typu float. Przy np. 10 milionach obiektów klasy TTik potrzeba aż 200 milionów tablic float wartosciDanych i to może właśnie tworzyć problem z alokowaniem tablicy.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez polymorphism » środa, 31 lipca 2013, 11:11

Zaraz, zaraz. My tu mówimy o alokacji 150 megabajtów, czy o stworzeniu wielomilionowej tablicy obiektów klasy TTik? Pierwsza opcja odpada, bo tyle to ja na moim laptopie z 1GB RAM-u mogę przydzielić. Druga opcja wydaje się prawdopodobna...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Maxymalny rozmiar tablicy

Nowy postprzez Corvis » środa, 31 lipca 2013, 11:15

Mówimy np o czymś takim:

TTik tablica [9000000];

Czyli o wielomilinowej tablicy obiektów TTik
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Maxymalny rozmiar tablicy

Nowy postprzez polymorphism » środa, 31 lipca 2013, 11:42

Przy założeniu, że TTik ma wielkość 84 bajtów, to taka tablica zajmie 756MB bajtów. Na stosie taka ilość nie przejdzie, ale na stercie powinna, szczególnie że system jest 64-bitowy, więc zakładam, że aplikacja też.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 35 gości

cron