Software > Coding
Abfrage freier Speicher / TOS 2.06
rainers:
--- Zitat von: HamSTer am Di 30.04.2013, 19:48:30 ---für mich als halblaie: was ist int_32t?
--- Ende Zitat ---
Lt. C++-Referenz das: Integer type with a width of exactly 32 bits.
HamSTer:
ist das dann ein long? oder unsigned long? was besagt das t?
simonsunnyboy:
t wie "type", das ist einfach eine Namenskonvention. I.d.R. wird das auf einem Atari einem long entsprechen.
BTW am Atari geht es immer um C, nicht C++, da gibt es subtile Unterschiede trotz vieler Ähnlichkeiten.
Zum Type int32_t empfehle ich Recherche unter dem Stichwort stdint.h, das ist ein Feature von C99 und sehr sinnvoll.
Ein long kann auf unterschiedlichen Plattformen unterschiedlich viele Bits lang sein, mit einem int32_t wird passend zur Plattform sichergestellt, daß man kein long sondern 32bit signed bekommt.
HamSTer:
Ich habe das mal als Übung für mich versucht. Dabei ist dies herausgekommen:
--- Code: ---#include <tos.h>
#include <stdio.h>
int main(void){
int i,j=0;
long mem=1,frei=0;
long merk[255];
for(i=0;i<255;i++){
merk[i]=0;
}
i=0;
while(mem != 0){
mem = Malloc(-1);
if(mem>0){
merk[i] = Malloc(mem);
frei=frei+mem;
i++;
}
}
for (j=0;j<i;j++){
Mfree(merk[j]);
}
printf("Bytes frei %ld",frei);
return 0;
}
--- Ende Code ---
Dabei bekomme ich dann Warnungen bei Malloc und Mfree: Non-portable Pointer assignment in function main
Was heißt das? Bei Pointern steig ich momentan vollkommen aus.
simonsunnyboy:
Du hast nirgendwo einen Pointer deklariert, die Funktionen wollen aber einen verwenden.
Zwar sind in der Tat am Atari 32Bit Zahlen auch gleichzeitig Adressen und pointer, aber C unterscheidet da. Und das ist auch richtig so, damit der Programmier auch weiß, womit er arbeitet.
Ein Zeiger auf einen Speicherbereich ist in C immer zweigeteilt, einmal der Pointer selbst, dargestellt durch * und einmal der Typ der Daten, auf die der Pointer zeigt.
Nimm an, du hast im Speicher tolle Zeichen liegen, die als char abgespeichert sind.
Dann kannst du in einem "Pointer auf char" die Startadresse dieser tollen Zeichen ablegen.
--- Code: ---char meinZeichen = 'z';
char *ptr_auf_meinZeichen = &meinZeichen; /* definiere "pointer auf char"und gibt ihm die Speicheradresse von meinZeichen */
--- Ende Code ---
Malloc und co wissen nicht, welcher Typ dahinter liegt, deswegen geben sie normalerweise einen "void Pointer" zurück. Den muss man dann zur Verwendung auf die Art der Daten casten, auf die man dann zugreifen möchte.
--- Code: ---void *speicher;
char *ptr_auf_zeichen;
speicher = malloc(50000); /* wir holen uns mal Speicher */
ptr_auf_zeichen = (char *)speicher; /* in diesem Speicher liegen in Zukunft chars */
*ptr_auf_zeichen = 'A'; /* ein großes A in diesem Speicher ablegen*/
ptr_auf_zeichen++; /* und auf die nächste Stelle zeigen lassen...*/
--- Ende Code ---
Vorschlag: Arbeite Dich bitte in ein sauberes und modernes C Tutorial auf dem PC ein. Wenn das sitzt, kann man das Wissen auf den Atari anwenden. Umgekehrt läuft man Gefahr, uralte C Dialekte zu verwenden und z.B. solche Fallen, wo aus Faulheit Adressen als long deklariert werden, weiterzuverwenden.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln