[C++] Tablica z dużą ilością elementów

0

Jak <ort>uteorzyć </ort>tablicę globalną, albo jakąkolwiek która ma np. 12345678901234567890 elementów. Próbowałem ze wskaźnikami ale nie potrafię jeszcze, dodam że chciałbym się móc do tablicy odwołać w innej części programu a wartości mają być typu integer. Jakakolwiek próba utworzenia takiej tablicy kończy sie komunikatem typu acces violation error. Proszę o pomoc.

0

Załóżmy, że w tablicy będą integery (2 lub 4 bajty zaleznie od systemu), a teraz policz rozmiar tablicy, podrap się po głowie, zastanów - jak jeszcze nie masz odpowiedzi, to powtórz powyższe czynności, a ostatecznie daj sobie spokój.

A jak w praktyce potrzeba takie rozmiary, to dzieli się to na przykład wg jakiegoś kryterium lub ręcznie robi obsługe tego na całym klastrze lub farmie serwerów, ale nie na stacjonarnym PC.

Możesz bawić sie listami dynamicznymi, a jak zje cały RAM to zrób mechanizm alokacji pamięci dyskowej, a jak jej Ci zabraknie, to alokuj jakieś zasoby sieciowe (jak masz do dyspozycji), a jak zabraknie.. :|

0

na 32bitowym systemie rozmiar żadnej zmiennej nie może przekroczyć 4GB, a po wzięciu pod uwagę ograniczeń narzucanych przez system - pod Linuksem mniej niż 1GB, pod WinNT mniej niż 2 lub 3GB (zależnie od konfiguracji systemu). więc zamiast zapychać pamięć korzystaj z pliku - te mogą mieć rozmiar 2^64 (o ile masz odpowiednio duży dysk...).

a poza tym tak duże tablice nie są do niczego potrzebne.

0

OK. Jeśli chodzi o pojemność to nic nie przeszkadzai, tylko jak to zrobić, a jeśli za pomocą pliku to zrobię to bardzo długo zajmię zczytywanie danych. Czekam dalej na podpowiedzi. I dzięki za zainteresowanie.

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <stdlib.h>
#include <alloc.h>
#include <stdio.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent
Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::dawajbutClick(TObject Sender)
{
char wsk = (char)farmalloc(231069789
sizeof(char));

if (*wsk != NULL){
komlbl->Caption = "OK";
for (__int64 l = 1; l < 231069789; l++){
wsk[l] = 161;
}
liczbalbl->Caption = (wsk[231069788]);
}
else {
komlbl->Caption = "ZLE";
liczbalbl->Caption = "";
}
}
//---------------------------------------------------------------------------

Taka funkcja działa ale za 3 naciśnięciem przycisku dawajbut. Ma ktoś może pomysł i powie mi dlaczego nie za pierwszym??? Program alokuje ponad 220MB, będę próbował więcej ale jak wyeliminuje tworzenie się tablicy dopiero za 3 razem. W sumie to zakażdym naciśnięciem przycisku pamięć jest zabierana ale dopiero po trzecim razie wszystko jest ok. [sciana]

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