Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.02.2007, 18:56

Länge eines Speicherbereichs ermitteln

Hi, ich bin neu hier :D

und ich hätte da eine frage. Wir kann ich in C++ die länge eines speicherbereichs ermitteln?

Ich meine, wenn ich ne variable habe:

C-/C++-Quelltext

1
void* pMem = malloc(200);


Wie ermittle ich dann die länge?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

03.02.2007, 19:42

Das geht nicht. Du musst dir schon merken, wie viel Speicher du reserviert hast.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

03.02.2007, 19:50

wie schon gesagt: mit reinem C++ geht das nicht.

unter windows gibts möglichkeiten per winapi. dazu solltest du aber den speicher auch mit den entsprechenden winapi funktionen anlegen.
schau dir mal HeapAlloc(), HeapSize() usw. an.

die meisten implementierungen legen afaik die länge eines blocks eine stelle vor dem blockbeginn ab. ich bin mir sicher es gibt ein paar hacks wie man da ran kommt. aber solche methoden sind nicht wirklich zu empfehlen.

am einfachsten merkst du dir einfach wie groß der block ist, und fertig ;)

4

03.02.2007, 20:12

Danke

Vielen Dank,

ich mach das nun so, dass gespeichert wird, wie groß der reservierte Speicher war.

Mfg, Neo_92

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

04.02.2007, 00:32

Im Header malloc.h gibts die Funktion _msize. Damit kann festgestellt werden wieviel Byte reserviert wurden.

C-/C++-Quelltext

1
2
3
4
int *p = new int[ 20 ];
size_t size = _msize( p );
std::cout << static_cast< unsigned int >( size ) << " bytes reserved" << std::endl;
delete [] p;


Das klappt natürlich nur unter Windows (malloc.h). Andernfalls kannst du nur über ganz fieße Tricks an die Werte kommen! ;)

grüße
@D13_Dreinig

Werbeanzeige