tablica 2 000 000 000 komorek

0

chce stowrzyc tablice w C++ taka jak w temacie ale nie moge
wyskakuje blad integer overflow
wiem ze to jest spowodowane tym ze integer takich wartosci nie przyjmuje ale jak zmienie na long to i tak nie dziala???

macie jakie spomysly??????????????

0

double i = 2000000000;

0

dynamiczna alokacja pamieci:)

int *t = new int[2000000000];

i nie zapomnij uzyc na koncu operatora delete

0

probowalem w C++
int *t = new t[2000000000];

nie dziala double tym bardziej
wyskakuje
integer overflow in expresion

kompiluje przez GCC i nic nie wychodzi
ma ktos jeszcze jakies pomysly

0

probowalem w C++
int *t = new t[2000000000];

chyba
int *t=new int[2000000000];

Chcesz zaalokować 8 GB pamięci , masz tyle wolnego w systemie ??

0

drobna pomylka ;p

to jak to moge zrobic a tyle wolnego w systemie to ja nie mam

0

Jej jak niektorzy ludzi sa niekumaci :(

double i = 2000000000;
int *t=new int[i];

Teraz vodka lapiesz ?! [diabel]
A z ta pamiecia to pozostaje tylko podzielic na pliki i zapisac na dysku bo nawet Win32 pozwala procesoi tylko na 2GB max miejsca w pamieci !!

0

Pochwal się jeszcze, po co Ci taka gigantyczna tablica? 8GB to trochę dużo, jeszcze nie spotkałem się z potrzebą zastosowania zmiennej o rozmiarze powyżej 4MB (nie zajmuję się grafiką, może to dlatego...), a piszę programy dobre 7 lat...

0

TAKA baza danych może byc potrzebna do Genetyki (ale tylko do bardzo zaawabnsowanej) chodzi o porównywanie ciągów i próby rekonstrukcji blędnych (niedoczytanych) odcinków....

Ale moc obliczeniowa potrzebna do obsługi (wyszukiwanie i porównywanie) jest OGROMNA!

0

EEE 8GB pamieci !!?? To trza bedzie racze uzyc swapa jak na warunki zwyklego pc.

0

EEE 8GB pamieci !!?? To trza bedzie racze uzyc swapa jak na warunki zwyklego pc.

Obawiam się, że nawet swap nie pomoże na Win9x :) Jak już w cześniej było wspomniane górna granica to 2GB (o ile się orientuję to razem ze swapem).

0

Win32 = 32 bity na zaadresowanie pamieci dla procesu -> 2 do 32 to 4GB z czego 2GB zajmuje na swoj uzytek Windaa pozostale 2 jest dla nas i sa to adresy liniowe a swap to po prostu rozszerzenie pamieci glownej i w niej znajduja sie dane z RAMu (nie bede tu tlumaczyl calej filozofii dzialania VMM [diabel] ). Wiec 2GB to max dla procesu, mozna to obejsc tworzac na HD pliki i mapowac je do pamieci i w ten sposob otrzymac duzo wiecej.

0

Wiecie kiedys miałem problem z alokacją kilkuset kilo pamięci pod dosem, ni cholery nie wiedziałem, jak przeskoczyć przeklęte 64k dla tablicy... Wpadłem na cos takiego:

type
  a=array[parawie 64k]of byte;
  pa=^a;
var
  b:array[x razy]of pa;

Przecież te dane nie muszą być trzymane w jednym słapie. Mozna sobie to wszystko ładnie podzielić. Wiem, że to forum traktuje o innym języku, ale zasady sa te same.

0

DOS - 16 bitow
Win32 - 32 bity na kernelu NT i zupelnie inne zarzadzanie pamiecia pozdzial pamieci. Zmienilo sie prakktycznie wszystko (brak segmentow itp itd) wiec zasady nie sa takie same !!

0

DOS - 16 bitow
Win32 - 32 bity na kernelu NT i zupelnie inne zarzadzanie pamiecia pozdzial pamieci. Zmienilo sie prakktycznie wszystko (brak segmentow itp itd) wiec zasady nie sa takie same !!

Aż sie zalogowałem, gdy to przeczytałem. Jeżeli przekraczasz max rozmiar niezależnie od tego, czy jest to 64k , czy 2 lub 4 G, to zasady są takie same, trzeba sobie podzielić. Czytaj uważnie.

0

Eh czlowieku to ze to trzeba podzielic to pisalem juz duzo wczesniej zadna rewelacja, ale w zaden sposob nie otrzymasz tego w podobny sposob jak to napisales wyzej. W zyciu nie da sie w jednym programie zaallokowac wiecej niz 2GB pamieci niezaleznie jakbys dzielil (gdybys mial pojecie o dzialaniu pamieci w Windows 32 to bys wiedzial), jedyne wyjscie to stworzenie plikow na dysku i ich mapowanie do pamieci to dopiero pozwala w swobodny sposob obejsc to ograniczenie.

0

EEE 8GB pamieci !!?? To trza bedzie racze uzyc swapa jak na warunki zwyklego pc.

nie rozśmieszaj mnie [rotfl] - przestrzeń adresowa na 32bitowym procesorze wynosi 2GB i swap nic tu nie pomoże.

0

Eh czlowieku to ze to trzeba podzielic to pisalem juz duzo wczesniej zadna rewelacja, ale w zaden sposob nie otrzymasz tego w podobny sposob jak to napisales wyzej. W zyciu nie da sie w jednym programie zaallokowac wiecej niz 2GB pamieci niezaleznie jakbys dzielil (gdybys mial pojecie o dzialaniu pamieci w Windows 32 to bys wiedzial), jedyne wyjscie to stworzenie plikow na dysku i ich mapowanie do pamieci to dopiero pozwala w swobodny sposob obejsc to ograniczenie.

Więc znowu cię poprawię... Niezależnie od tego jak działa pamięc to co zaproponowałem to tylko sposób myslenia. Dlatego napisałem w pascalu, a nie dałem gotowe rozwiązanie. Mapowanie, oki, skoro tak twierdzisz... Ja bym to zrobił pewnie troszke inaczej (albo po prostu tak samo, tylko inaczej bym to nazwał), a efekt byłby podobny. Niezależnie od tego, czy zrobisz tablicę uchwytów do plików, czy jakkolwiek to rozwiążesz, trzeba to podzielić. Piszesz, że 32 bity, oki. Ale mechanizm pozostaje wciąz ten sam, I masz tu całkowitą racje, wspomniałes o tym pierwszy, więc wszelka dalsza dyskusja nie ma większego sensu, bo po prostu używamy innych słów, choć prawdopodobnie to samo mamy na mysli.

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