[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: integer groesser 2^31 in C



Es gibt Compiler, die einen Typ int64 eingebaut haben (VC6 zum Beispiel) 
und andere, die 64 Bit Zahlen in einer struct LARGE_INTEGER in einer *.h 
Datei anbieten (z.B. BCB ab v3). Was die verschiedenen GNU Versionen haben 
weiß ich noch nicht (#if defined( [int64|_int64|o.ä.] ) ... // versuchen). 
Es ist jedoch leicht, eine Klasse für Operationen mit 64 Bit Zahlen selbst 
zu bauen oder eine Sammlung Funktionen in C -- nur die Ausgabe per printf 
ist eine langweilige Fleißarbeit. Auch sind arrays aus 2^31 Bit großen 
Einzelspeicherbereichen möglich.

        Gruß, gw

PS:  Der erste Versuch, diese Antwort zu senden, hatte keinen Erfolg. Wenn 
jemand meint, das Thema wäre out of topics, hätte die Anfrage nicht 
veröffentlicht werden dürfen.

Achim Fritz wrote:

> Hi,
> 
> fuer ein Finite-Element-Programm in C, muesste ich unbedingt mehr als 2Gb
> Speicher allokieren. Der Rechner hat 2Gb Speicher und 2Gb Swap.
> Ich habe erst gedacht, es liegt am Kernel (CONFIG_HIGHMEM ist gesetzt),
> habe jetzt aber festgestellt, dass es nicht moeglich ist in C eine Integer
> zu deklarieren, die groesser als 2^31 ist.
> 
> fritzam@vwin:~/ugspeicher/test-proc> cat testint.c
> #include  <stdlib.h>
> 
> int main(void){
>    long long int a=2200000000;
>    int b=2200000000;
>    int c=2000000000;
>    printf("a=%d\n",a);
>    printf("b=%d\n",b);
>    printf("c=%d\n",c);
>    exit(0);
> }
> fritzam@vwin:~/ugspeicher/test-proc> gcc testint.c
> testint.c: In function `main':
> testint.c:4: warning: decimal constant is so large that it is unsigned
> testint.c:5: warning: decimal constant is so large that it is unsigned
> fritzam@vwin:~/ugspeicher/test-proc> ./a.out
> a=-2094967296
> b=-2094967296
> c=2000000000
> 
> Hab schon mehrere Compiler ausprobiert (unter anderem auch Borland auf
> Windows) und in den manpage von gcc nach optionen gesucht.
> (2.4.21 hab ich auch schon getestet)
> 
> Der Kernel hat auch keine Probleme mit grossen Zahlen:
> fritzam@vwin:~/ugspeicher/test-proc> echo "2^31"|bc
> 2147483648
> fritzam@vwin:~/ugspeicher/test-proc> echo "2^32"|bc
> 4294967296
> fritzam@vwin:~/ugspeicher/test-proc> echo "2^100"|bc
> 1267650600228229401496703205376
> 
> Und noch was:
> fritzam@vwin:~/ugspeicher/test-proc> ulimit -a
> core file size        (blocks, -c) 0
> data seg size         (kbytes, -d) unlimited
> file size             (blocks, -f) unlimited
> max locked memory     (kbytes, -l) unlimited
> max memory size       (kbytes, -m) unlimited
> open files                    (-n) 1024
> pipe size          (512 bytes, -p) 8
> stack size            (kbytes, -s) 8192
> cpu time             (seconds, -t) unlimited
> max user processes            (-u) 7168
> virtual memory        (kbytes, -v) unlimited
> 
> Hat jemand ne Ahnung, oder ne Idee?
> 
> Gruss Achim
> 
> 



Reply to: