Groesse des allokierten Speichers ermitteln
-
Hallo Leute,
ich allokieren hiermit speicher:
long* GetMem(void) { int Pages=7; long *data=calloc(Pages*126,2); //jetzt kommt was rein in die Daten return data; }
Wenn ich nun in einer anderen Funktion das aufrufe, wie finde ich heraus, wie gross der allokierte Speicher ist, da Pages je nachdem variabel ist?
void foo(void) { long *content=GetMem(); //jetzt brauche ich aber fuer ne Schleife die Anzahl der allokierten Words im Speicher }
danke, der Guenther
-
Hallo
entweder übergibst du an foo auch die Anzahl an Elementen, oder du nimmst besser noch gleich ein STL-Container, wie vector<long>
bis bald
akari
-
akari schrieb:
Hallo
entweder übergibst du an foo auch die Anzahl an Elementen, oder du nimmst besser noch gleich ein STL-Container, wie vector<long>
Noch was uebergeben? Wie das? Und STL-Container kenne ich noch nicht.
Aber es gibt keine Moeglichkeit das Nachtraeglich rauszufinden?
Danke schonmal.
der Guenther.
-
Hallo
Wenn du Pages als Übergabeparameter benutzten würdest, hättest du nicht die Probleme.
long* GetMem(int Pages) { long *data=calloc(Pages*126,2); //jetzt kommt was rein in die Daten return data; } long *data = GetMem(7);
STL-Container sind Erweiterungen von C++, einer davon ist vector<>. Das ist ein dynamisches Array, was immer seiner Größe weiß.
Zu diesem Thema solltest du dir ein Tutorial durchlesen, siehe Menü auf dieser Seite oben rechts.bis bald
akari
-
Aber ich bekomme Pages gar nicht daher. Das ist etwas, was ich aus einem externen Geraet auslese.
Aber ich habe mal in der MSDN gewuehlt und bin zufaellig auf
_msize
gestossen.
long *buffer; size_t size; if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL ) exit( 1 ); size = _msize( buffer ); printf( "Size of block after malloc of 1000 longs: %u\n", size );
das koennte gehen. Ich probier's mal.
der Guenther
-
gehts nicht auch ganz einfach mit sizeof()
oder hab ich da was falsch verstanden?
-
long *buffer; int s = sizeof(buffer);
sizeof liefert da 4 bytes je nachdem welcher compiler / system, egal wie gross der reservierte speicher ist auf das buffer zeigt.
also soll heisen: sizeof liefert da die grösse des zeigers nicht die grösse des speichers auf das der zeiger zeigt.
-
was wird dann bei
long buffer[100]; zurückgeliefert??
-
MasterCounter schrieb:
was wird dann bei
long buffer[100]; zurückgeliefert??Die Grösse des Speichers. Hier ist buffer aber auch kein Zeiger.
Guenther schrieb:
Aber ich habe mal in der MSDN gewuehlt und bin zufaellig auf
_msize
Ist aber kein Standard. Wenn's standardkonform sein soll, dann nimm einen Container, zB std::vector.
Oder gib ein struct zurück, welches alle benötigten Infos enthält.
struct MyMem { size_t size; long* data; }; MyMem GetMem(void) { int Pages=7; MyMem mem; mem.size=Pages*126; mem.data=calloc(Pages*126,2); //jetzt kommt was rein in die Daten return mem; }