RAM-Größe ermitteln in C
lima-city → Forum → Programmiersprachen → C/C++ und D
abfragen
angabe
auswahl
bibliothek
datei
durchlesen
endeffekt
gesamte datei
http
kopieren
memory
methode
optimierung
schleife
sinn
standard
stehenden speichers
url
verwendung
wichtigen grund
-
Ich schreibe eine kleine Konsolenanwendung, wo u.a. auch Kopieren (mit Zwischenspeichern) einiger Dateien erlaubt ist.
Der Kopiervorgang wird mit Hilfe von stat() und malloc() realisiert.
Mit stat() ermittle ich die Größe der Quelldatei und mit malloc() allokiere ich einen Speicherbereich in der Größe der Quelldatei. Problem dabei ist, dass wenn die Quelldatei die Größe des Hauptspeichers überschreitet.
Gibt es in C (bin kein eingefleischter C-Programmierer) Standard-Bibliotheken, wo es eine func den passenden Rückgabewert (bin von Java etwas verwöhnt, wo es beinahe zu allem eine "get" Methode gibt) liefert oder muss man sich da was selbst zusammenbauen? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hast du einen wichtigen Grund warum du die Quelldatei vollständig in den Arbeitsspeicher laden musst? Normalerweise würde man in kleinen Blöcken (z.B. 1024 Bytes) von der Quelldatei lesen und dann in die Zieldatei schreiben und das ganze natürlich in einer Schleife, sodass am Ende die gesamte Datei kopiert wurde.
Falls du wirklich auf das Abfragen des zur Verfügung stehenden Speichers bestehst könnte dir das weiterhelfen: *klick* -
hackyourlife schrieb:
Hast du einen wichtigen Grund ... []
Ja, das hat einen Grund.
Es geht um Optimierung beim Kopieren.
Ich habe, oder besser gesagt, der User hat im Endeffekt 3 Varianten zur Auswahl.
1. Blockweises Kopieren
2. Kopieren mit Zwischenspeichern
3. und unter Verwendung eines Speichabbilds
Nach dem Kopiervorgang wird jeweils die Zeit ermittelt und bla bla bla. Eigtl irrelevant für das vorliegende Problem.
Die ertse Variante - Blockweises kopieren, die du bereits erwähnt hast, habe ich umsetzten können. Dem User wird die Möglichkeit von Angabe der Blöckgröße (256, 512, 1024 Bytes etc.) bereitgestellt.
Bei der 2. Methode habe ich bisher einfach einen fixen Wert genommen und diesen als "MaxRamSize" gesetzt. Aber das ist nicht der Sinn der Sache. Deswegen die Frage.
Danke für den Link. Werde mal durchlesen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage