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: