![]() |
C++: Zeiger und Speicher reservieren
grüßt gott!
ich habe einige grundlegende fragen zu c++builder, welche sich mir inzwischen stellten. zu den zeigern: wenn ich speicher für einen zeiger reserviere, muss ich ihn nachher wieder (in c++ mit delete) freigeben, da dies nach rückkehr aus der funktion nicht automatisch geschieht und sonst speicherlücken entstehen. was ist jedoch eigentlich, wenn das gesamte programm beendet wird, erfolgt dann auch eine freigabe von eventuellen speicherlücken? über diesen zusammenhang bin ich mir noch im unklaren. zu speziellen datentypen: in c++ gibts neben den char-arrays auch noch den typ "ansistring". in der hilfe stand darüber: "Die maximale Länge der Strings ist nur vom verfügbaren Speicher abhängig. Optimale Speichernutzung durch gemeinsame Referenzen." was bedeutet dies nun. wenn ich nun einen ansistring ohne startwert deklariere, wird dann bereits schon speicherplatz reserviert, oder erst bei einer wertzuweisung? wenn dieser datentyp wirklich so lange zeichketten aufnehmen kann, dann wäre doch kein speicher mehr vorhanden, wenn für ihn der gesamte heap reserviert wird? also wie funktioniert das nun; "wie viel" byte wird reserviert und "wann" erfolgt das? genau die gleiche frage in grün zum typ "unsigned long long". deklariere ich einen bezeichner von diesem typ, wird dann sofort 8 byte vom heap in anspruch genommen? wovon hängt eigentlich die gesamtgröße des freien heaps ab? gibts eine möglichkeit, diese zu ermitteln? ich bedanke mich für eure eventuelle zeitinvestition in meine fragen :) viva los tioz! |
Re: C++: Zeiger und Speicher reservieren
pax tecum :hi:
SCNR Kann man eigentlich relativ kurz zusammenfassen: - Was du mit new an Speicher reservierst, musst du mit delete wieder freigeben. Automatisch passiert da nix. - Was du mit Create erzeugst, musst du mit Free wieder freigeben. Ausnahmen bestätigen die Regel. - AnsiStrings sind intern Pointer auf n Heap. Dort liegt dann n String, der IMHO theoretisch den gesamten Heap ausfüllen kann(2GB). - AnsiStrings verwaltet Delphi/C++Builder für dich - Der Heap is nur n "imaginäres Gebilde". Jeder Prozess is überzeugt davon, dass er 2GB zur Verfügung hat. Das Zusammenspiel regelt Windows(bzw. genauer: der MemoryManager). Wenn ich Mist erzählt haben sollte, korrigiert mich... mfg Christian |
Re: C++: Zeiger und Speicher reservieren
namaste, r2c2!
zunächst erstmal, danke für die antwort! :) Zitat:
Zitat:
und nochmal zum ansistring: wenn ich solch einem bezeichner nun eine 23 byte-zeichenkette zuweise, wie viel byte wird dann verbraucht? 23 oder dann doch mehr? :freak: der grund, warum ich solche fragen stelle ist, dass ich wissen möchte, was genau vorgeht und wie stark ich mein programm somit verhunze, wenn ich mehrere ansistrings und unsigned long long-typen deklariere(n muss)... :nerd: |
Re: C++: Zeiger und Speicher reservieren
Zitat:
Zitat:
Zitat:
Zitat:
Auch bei unsigned long long(~ Int64 in Delphi) brauchst du dir da keine Gedanken machen. Wobei man die sowieso extrem selten braucht... Der Einzige Grund warum man sich darüber Gedanken machen kann, is Geschwindigkeit. (Ansi)Strings sind etwas langsamer als PChar bzw. char *. Wenn du ne Funktion hast, die n paar Tausend Mal aufgerufen wird, kannst du dir überlegen, ob du das nicht schneller hinkriegst, ansonsten brauchst du dir da auch keine Gedanken machen... mfg Christian |
Re: C++: Zeiger und Speicher reservieren
Hallo,
Zitat:
Zitat:
Gruß xaromz |
Re: C++: Zeiger und Speicher reservieren
Zitat:
gut, ich danke euch beiden, ihr habt meine fragen beseitigt :xmas: einen wunderschönenen und produktiven tag wünsche ich euch zwei noch :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz