Zmiana rozmiaru tablicy

0

Nie wiem jak rozwiązać następujący problem:
Program może (ale nie musi) w skrajnym przypadku mieć miliard * miliard danych zgromoadzonych w 2wymiarowej tablicy.
Niestety kompilator C++ nie daje stworzyć tak dużej tablicy (nawet dynamicznie)... pomyślałem, więc że to dobrze bo może faktycznie nie ma sensu zakładać z góry że tyle danych będzie.
Więc robie małą tablice 2wymiarową a gdy przychodzą nowe dane, tworze nową tablicę (większą) i wkładaam tam dane z pierwszej tablicy jak i nowe dane. Wszystko byłoby pięknie gdyby nie fakt, że muszę przekopiowywać wszystkie poprzednie dane do nowej tablicy kilkaset tysięcy razy... a to trwa.
Jest jakiś sposób aby powiększyć starą tablicę o nowe miejsca ? Mówię ciągle o tablicach 2wymiarowych.

Dopowiem jeszcze że często nowe dane nadpisują stare, mają więc w nowej tablicy dokładnie to samo miejsce co w starej...dlatego szukam jakiejś optymalizacji

0

Pewnie w c++ coś tam by się znalazło ale związku z tym że siedzę w czystym C to tylko tutaj mogę doradzić.
Może w twoim przypadku były by dobre listy? Możesz alokować następne elementy, usuwać wybrane i inne operacje przeprowadzać. Z rezerwacją nie ma problemu, przynajmniej na linuksie. Robiłem listy które zajmowały ponad 2GB - dla testów ;-P

0

problem w tym że chodzi o dostęp do tych danych. to jest układ współrzędnych ogromny, dlatego tablica 2wymiarowa wydaje się być najbardziej odpowiednia w interpretacji. na razie wpadłem na pomysł rezerowowania większych bloków np. po 500tys. na 500 tys. aby zminimalizować liczbę kopiowań.
w sumie to i tak to nic mi nie da bo w końću będe musiał zarezerwować miliard*miliard... i jak to zrobić?

jeszcze jedna sprawa: w skrajnym przypadku mogą być 2 dane: jedna na pozycji [0,0] a druga [miliard,miliard] , odległość między nimi musi być zachowana! wtedy też muszę stworzyć tą ogromną tablice (której na razie nie potrafie stworzyć

0

jeżeli używasz VS to w opcjach możesz poszukać opcji z ograniczeniem na stos i inne i swapa chyba ale generalnie 1kkk * 1kkk * 2 bajty to sporo pamięci nawet jak na short inta

0

Można się dowiedzieć co to będzie? [green]

0

O czym wy w ogóle mówicie?

miliard * miliard = 109 * 109 = 10^18
nawet gdyby to były BITY to daje nam:
125000000000000000 bajtów
122070312500000 kilobajtów
119209289551 megabajtów
116415322 gigabajtów
113687 terabajtów
111 petabajtów

Ciekawostka : rapidshare posiada dyski o łącznej pojemności kilku petabajtów...

Proponuje żeby autor jednak przemyślał swój chory pomysł. Co ty tam chcesz przechowywać? Głowe dam że to jest jakaś macierz rzadka...

0

nie znasz moich potrzeb :P
poczekam jeszcze z kilka latek aż ramu starczy :D

0
KlyYmek napisał(a)

nie znasz moich potrzeb :P
Mów dalej.

0

Jakbyś jednak kiedyś potrzebował takiej struktury, o której piszesz to zainteresuj się kontenerami ze standardowej biblioteki c++, vector'y list'y map'y itd. Możesz również sam napisać taką dynamiczną strukturę, to nie jest trudne.
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1