Ich würde gerne wissen, ob es eine Möglichkeit gibt, die Stapelgröße eines laufenden Programms in C++ programmgesteuert zu bestimmen. Wenn ja, gibt es auch eine Möglichkeit, programmatisch zu ermitteln, wie viel Heapspeicher das Programm zur Laufzeit verwendet? Zum Bestimmen der Größe des Heapspeichers konnte ich einen möglichen Weg sehen, indem ich den Operator new
und delete
überbelastete, aber ich denke nicht, dass dies mit intelligenten Zeigern funktionieren würde.Ermitteln der Stapelgröße zur Laufzeit in einem C++ - Programm
Ich versuchte es mit dem folgendes zu erreichen:
int main(){
const char STACK_BEGIN = 'A';
//a lot of code
register unsigned long int STACK_NOW asm("%esp");
long long int stack_size = (reinterpret_cast<int>(&STACK_BEGIN) - STACK_NOW);
//rest of code
}
Nein, es gibt nicht wirklich Standard-Methoden, dies zu tun. Es kann jedoch betriebssystemspezifische Systemaufrufe geben, um diese Informationen zu erhalten. –
Wie ich mich erinnere in Windows Stack-Seiten werden nur nach Bedarf festgelegt. Das bedeutet, dass die Kosten für das Angeben eines großen Stapels nur ein wenig reduzierter Adressraum sind und nicht die tatsächliche Speicherbelegung (bis zum erforderlichen Zeitpunkt). Durch die Verwendung von Standardsammlungen wie 'std :: vector', die ihre Puffer dynamisch zuweisen, können Sie die Stack-Nutzung erheblich reduzieren. –
Ich denke, Sie könnten zumindest eine ungefähre Vorstellung von der Stack-Nutzung bekommen, indem Sie einen global zugänglichen Zeiger auf die erste Variable speichern, die Sie auf dem Stack in Ihrer 'main()' Routine deklarieren, und dann jederzeit während der Ausführung Ihres Programms , finde den Unterschied zwischen der Adresse einer kürzlich deklarierten Stapelvariablen und dem Wert dieses globalen Zeigers. Es ist eine grobe Technik, sollte aber zumindest eine Vorstellung von Stack-Nutzung bieten. – Logicrat