# Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !



## Crymes (8. Mai 2011)

*Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Hallo.
Da wir bald einen Computer verkaufen und ich praktischen Spass noch dran haben will, habe ich mir überlegt, ein Programm zu erstellen, dass eine beliebig große Datei erstellen soll, mit dem man dann die komnplette Festplatte überschreibt.
Jetzt habe ich mehrere Probleme:


```
[FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]
// Dateierstellung.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.

//[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]
#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"stdafx.h"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]
#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"iostream"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]
#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"conio.h"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]
#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"string"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]
#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"sstream"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]
#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"fstream"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]
#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"ctime"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]
using[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]namespace[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] std;[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]
int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] main()[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
{

	string speicherort=
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]""[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2];[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
	
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] size=0;[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
	fstream datei;

	string time = 
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]""[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2];[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
	
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] count=0;[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
	

	cout << 
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"Dieses Programm erstellt eine beliebig große Datei."[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] << endl << [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"Stellen sie sicher, dass genug Speicherplatz zur Verfügung steht!"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2];[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
	cout << 
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"Geben sie den Speicherpfad für die Datei ein >>>>"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2];[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
	cin >> speicherort;

	cout <<
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"Geben sie die Größe der Datei in GByte ein >>>>"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2];[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
	cin >> size;

	datei.open(
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"speicherort"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2], ios::out);[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
	
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]do[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
	{

		time = 
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]""[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2];[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
		srand(time(NULL));

		time = rand() %1000000;

		datei << time;

		count=count+1;

		

	}

	
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]while[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] (count=size);[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
	datei.close();

	
[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]return[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2](0);[/SIZE][/FONT][/SIZE][/FONT]
[FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]
}[/SIZE][/FONT][/SIZE][/FONT]
```
 
1. Bei dem srand(time(NULL));
    wird bei dem time gemeckert, dass irgendwas ohne entsprechender pointer funltion passiert.

2. Weiss einer, wie ich das realisieren kann, dass bis zu einer bestimmten Dateigröße weitergeschrieben wird?

Danke für eure Antworten, Crymes.


----------



## mauorrizze (10. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Mein letztes C++ ist schon'n Weilchen her, aber mal meine 2 Gedanken dazu:
srand(time(NULL)); sieht für mich eigentlich okay aus. Bei der nächsten Zeile... time ist doch ein string!? und rand() liefert irgendwas int-ähnliches zurück...
Die Dateiausgabe würde ich auf Binärebene machen, damit kannst du besser kontrollieren wieviele Daten du schreibst (diese dann einfach "mitzählen", fertig). Zur Anregung: C++ Binary File I/O

Aber am Ende wird das vermutlich nicht sehr effizient und du kannst damit keine Dateien überschreiben, das ist dir hoffentlich klar? Also einziger Weg das einzusetzen: Festplatte formatieren, an Rechner hängen und AUF diesem Rechner die Dateien erzeugen, wobei du keine Kontrolle hast wo die Dateien physikalisch gespeichert werden. Die Festplattentools arbeiten alle auf noch niedrigeren Ebenenen.


----------



## bingo88 (10. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Du darfst srand(...) eigentlich nur 1x aufrufen. Sonst kommen evtl. immer dieselben Werte heraus.


----------



## Crymes (10. Mai 2011)

Ok, dass ich die Datei dann blind kopiere, ist in Ordnung.
Ich probiere heute nochmal rum, vielleicht habt's dann.


----------



## Skysnake (12. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Der eine Fehler wurde ja schon angesprochen. Time ist bei dir ein String, rand() liefert aber einen int. Das kann nicht funktionieren.

Was ich auch nicht verstehe ist, warum du "ctime" einbindest. Das macht man normal mit <> bei den Standardbibs. 

Zudem würde ich nicht ctime sondern <time.h> verwenden. Also zumindest ich verwende immer time.h und nicht ctime.


----------



## Crymes (13. Mai 2011)

Bei Visual Studio sind diese " Standard.
Ich kann auch Time.h nehmen, habe davon keine Ahnung.
Ich probiere mal, dass Problem zu beheben, habe nur wenig Zeit.
Könnte ich eigentlich aus dem Programm einen Benchmark machen?


----------



## bingo88 (13. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Eigentlich dürfte nur stdafx.h die "" haben (weil die wirklich in deinem Projket liegt), alle anderen includes müssten <> haben.


----------



## Fragile Heart (13. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*



Crymes schrieb:


> Bei Visual Studio sind diese " Standard.


Also noch mal ganz genau, obwohl Bingo es ja schon gesagt hat!

Alles was du lokal in deinen Projektverzeichnis hast bindest du IMMER mit "" ein, bei Pfandangaben werden die vom Compiler immer relativ zum Projektverzeichnis interpretiert". Alle Header die zum Compiler gehören oder dessen Position du in den Compiler Optionen festgelegt hast bindest du IMMER mit <> ein. 

VS ist da zwar genädig und geht dennoch, aber das machen bei weiten nicht alle!


----------



## Skysnake (13. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

jo gcc etc meckert da


----------



## Crymes (17. Mai 2011)

Also ich habe die Variable mal
Mit int belegt und Status 0 zugewiesen, meckert immer noch, dass er so nen komischen Pointer braucht.


----------



## Skysnake (17. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

WO hast du WAS gemacht?

Bitte bei so etwas immer recht ausführlich sein


----------



## bingo88 (17. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

So, nach einigen Anpassung kompiliert es bei mir 

1. Nenne keine Variable wie eine vorhandene Funktion! ("String time;" ist also verboten!)
2. Brauchst du die Variable time überhaupt nicht, du kannst direkt _datei << (rand() %1000000);_ schreiben. Abgesehen davon liefert rand() nen int und String ist daher nur von Interesse, wenn du die Datei mit nem Texteditor lesen willst.
3. _do{ ... } while (count = size)_ ist eine Endlosschleife, da du eine Zuweisung vornimmst und keinen Vergleich (müsste wenn == heißen, was in diesem Fall aber logisch falsch wäre, da die Schleife nur 1x ausgeführt werden würde). In diesem Fall müsste es z. B. _while (count < size)_ heißen, also _solange count kleiner size ist_.
4. srand nur 1x aufrufen hatten wir ja schon

Das steht nun in meiner main()

```
string speicherort;
int size = 0;
fstream datei;
int count = 0;

cout << "Dieses Programm erstellt eine beliebig große Datei." << endl <<
    "Stellen sie sicher, dass genug Speicherplatz zur Verfügung steht!";

cout << "Geben sie den Speicherpfad für die Datei ein >>>>";
cin >> speicherort;
cout << "Geben sie die Größe der Datei in GByte ein >>>>";
cin >> size;

datei.open("speicherort", ios::out);    
srand(time(NULL));

do
{
    datei << (rand() %1000000);
    count=count+1;
} while (count < size);  // wenn du das so machst musst du size noch auf Bytes umrechnen

datei.close();
return 0;
```


----------



## Crymes (17. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

OK, danke.
Gibt es irgendeine funktion, die mir die Größe der Datei zurückliefert?
Ist das dann überhauptnoch performent?
Der braucht ja dann für das schreiben - schauen   Zeit.


----------



## bingo88 (17. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Versteh ich jetzt nicht ganz. Klar gibt es die Funktion, aber warum willst du die aufrufen, wenn du die Datei doch selbst erzeugst? Du zählst doch die counter-Variable hoch (wobei du die natürlich um die Anzahl geschriebener Bytes hochzählen musst, hier zum beispiel mit counter = counter + sizeof(int))


----------



## Crymes (17. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

hätte sein können, dass die performanter ist.


----------



## Skysnake (17. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Ähm.... Ich glaub du solltest dir mal nochmals einige Grundlegende Sachen anschauen wie Funktionen, Funktionsaufrufe, wie werden diese Abgearbeitet, und was sind Rückgabewerte bzw. überhaupt was sind die unterschiedlichen Datentypen und was bedeuten die, sowie deren Grenzen.

Um Performance solltest du dir die nächste Zeit erst mal keine Gedanken machen. So was macht man nur als wirklich erfahrener Programmierer an einem konkreten Problem, wenn einem auch klar ist, das man das Problem an sich im Halbschlaf runter schreiben kann. Vorher brauchst du gar nicht groß damit anfangen dir Gedanken über Performance zu machen, denn etwas performant zu machen ist WIRKLICH nicht so einfach und erfordert einiges an Erfahrung und Wissen.


----------



## Crymes (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Ich habe mir das korrigierte Programm nochmal genauer angesehen.
Kann mir nochmal einer sagen, wofür das srand(variable(NULL)) und das variable=rand()%irendwas steht?
Eigentlich reicht doch letzteres, oder?


----------



## bingo88 (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

srand() ist der sogenannte Seed für den PSeudozufallsgenerator. Damit wird der quasi initialisiert. Ansonsten kann es passieren, dass keine "zufälligen" Zahlen, sondern immer dieselben vergeben werden. DIe andere Operation ist die Modulo-Operation. rand liefert eine Zahl zwischen 0 und RAND_MAX. Mit Modulo kannst du den Zahlenbereich eingrenzen: rand() % 100 würde z. B. Zahlen zwischen 0 und 99 erzeugen. Diese Operation erzeugt also keine Zufallszahl, sondern schränkt nur den Bereich ein!


----------



## Crymes (18. Mai 2011)

Dann wird also -in dem Fall time- erst eine beliebige Zahl geschrieben, und dann gelesen und auf den gewünschten Bereich verkleinert?


----------



## bingo88 (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

srand(time(NULL)); // rand initialisieren; nur 1x aufrufen!

int v = rand() % 100; // v = Zahl zwischen 0 und 99
datei << v; // v in Datei schreiben


----------



## Fragile Heart (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*



Skysnake schrieb:


> Um Performance solltest du dir die nächste Zeit erst mal keine Gedanken machen. So was macht man nur als wirklich erfahrener Programmierer an einem konkreten Problem, wenn einem auch klar ist, das man das Problem an sich im Halbschlaf runter schreiben kann. Vorher brauchst du gar nicht groß damit anfangen dir Gedanken über Performance zu machen, denn etwas performant zu machen ist WIRKLICH nicht so einfach und erfordert einiges an Erfahrung und Wissen.


 Und selbst dann muss man immer wieder Knuth zitieren!


> Premature optimization is the root of all evil


----------



## Skysnake (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Ja klar, aber er hat ja absolut keine Ahnung davon was er macht....

Sorry, da geht es erst mal darum, dass die Programme richtig laufen. Optimierung ist WIRKLICH nicht so trivial. Ich weiß das meine Programme funktionieren, die ich schreibe und mache mir daher auch Gedanken darüber wie ich etwas mache. Man sollte sich aber wirklich immer überlegen, wie viel Zeit einem eine geringe Optimierung wert ist...

Und du weißt ja 10% des Codes laufen 90% der Zeit. An den 10% rum zu schrauben macht Sinn, die restlichen 90% kann man eigentlich getrost vergessen, da es einfach nichts bringt, diese zu beschleunigen.

Und naja, wenn man Objektorientiert programmiert, muss man sich klar erst mal Gedanken zum Aufbau machen, wenn man sich aber an die Regeln hält, kann man einzelne Funktionen später leicht durch optimierte Varianten ersetzen. Die Königsdisziplin ist halt meiner Meinung nach, wenn man von Anfang an sich mit Datenformaten, Cachelines etc. etc. beschäftigt. Dafür benötigt man aber einfach einiges an Erfahrung!

Du musst ja um das sinnvoll zu machen mal so schnell 2-3 Lösungsansätze aus dem Ärmel schütteln, um die Sache miteinander vergleichen zu können etc.

Wenn es da schon an Sachen wie String=/=int hapert etc. dann sollte man wirklich sich erst mal darauf konzentrieren, dass das Programm läuft. Zumal das Programm ja winzig ist. Das kann man auch mal schnell neu aufsetzen.

Ich hoffe du verstehst was ich meine 

Und PS:

srand darf man schon mehrfach aufrufen. Der Pseudozufallszahlengenerator wird dann halt nur jedes mal neu initialisiert.

Man sollte aber jedes mal wenn man srand() verwendet, den ersten Wert den rand liefert verwerfen, da dieser recht abhängig vom Seedwert sein soll. Nur so btw.


----------



## Fragile Heart (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*



Skysnake schrieb:


> Und du weißt ja 10% des Codes laufen 90% der Zeit. An den 10% rum zu schrauben macht Sinn, die restlichen 90% kann man eigentlich getrost vergessen, da es einfach nichts bringt, diese zu beschleunigen.


Klar, deswegen gehe ich Grundsätzlich bei neuen Sachen erstmal hin und sehe zu das es läuft, meist in einen kleinen Demo. An diesen kann man dann schauen wo die Probleme sein können und die Erkenntnise lässt man dann in seinen Gedanken einflissen. Klar das ist nichts für jemanden der gerade anfängt. 



Skysnake schrieb:


> Die Königsdisziplin ist halt meiner Meinung nach, wenn man von Anfang an sich mit Datenformaten, Cachelines etc. etc. beschäftigt. Dafür benötigt man aber einfach einiges an Erfahrung!


Das ist auch für die meisten Programmier gar nicht notwendig. Ich möchte nicht wissen wieviel Programmierer dadraus noch nie was von Cachelines gehört haben. 



Skysnake schrieb:


> Du musst ja um das sinnvoll zu machen mal so schnell 2-3 Lösungsansätze aus dem Ärmel schütteln, um die Sache miteinander vergleichen zu können etc.


Ich denke hier ist weniger das Lösungsansätze haben als mehr das bewerten das Problem, aber ich stimme auch hier im Prinzip zu.


----------



## bingo88 (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*



Skysnake schrieb:


> srand darf man schon mehrfach aufrufen. Der Pseudozufallszahlengenerator wird dann halt nur jedes mal neu initialisiert.
> 
> Man sollte aber jedes mal wenn man srand() verwendet, den ersten Wert den rand liefert verwerfen, da dieser recht abhängig vom Seedwert sein soll. Nur so btw.


 Hat bei mir nicht funktioniert, die Schleife wurde schneller aufgerufen, als sich time(NULL) änderte -> Mist


----------



## Skysnake (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*



Fragile Heart schrieb:


> Das ist auch für die meisten Programmier gar nicht notwendig. Ich möchte nicht wissen wieviel Programmierer dadraus noch nie was von Cachelines gehört haben.


Klar, aber die Sache kann SEHR entscheidend sein. Hab erst letzte Woche wieder vor Augen geführt bekommen, wie wichtig so etwas sein kann.

Hatten ein Singelthread Pogramm um Pi zu berechnen. Lief auch gut. Dann haben wir das auf den Server geschmissen und geschaut wie das Programm zwischen 1 und 46 Threads skaliert. Es kam dann raus das es gar nicht skaliert, sondern sogar langsamer wird.

Als wir gefragt wurden, woran das liegt (wir hatten den Quellcode nur ganz kurz gesehen) war erst mal GROSSES Schweigen angesagt  Naja, wir sind dann nach ner Weile drauf gekommen, das wir immer schreiben, und uns damit die Cacheline versauen, weil wir keine lokalen Variablen hatten, und so alles innerhalb einer Cacheline gesessen ist 
Haben dann die Cacheline mit Dummydaten geüllt, so das jeder reale Wert in ner neuen Cacheline steht. TATA fast lineare Skalierung 

Auf so etwas muss man aber erst mal kommen  Zumal man selbst rein intuitiv das Problem damit umgeht, das man halt lokale Variablen hat, die einem dann nicht ins Handwerk pfuschen. 

Atm müssen wir ne n-Body-Simulation machen, da ist auch schwer überlegen angesagt, wie man die geschickt anordnet etc.



> Ich denke hier ist weniger das Lösungsansätze haben als mehr das bewerten das Problem, aber ich stimme auch hier im Prinzip zu.


 
Ja da hast du natürlich recht. Das man die Lösungsansätze Quantifizieren kann war von mir einfach mal vorausgesetzt.


----------



## bingo88 (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Das Cacheline-Problem kenn ich von der Matrixmultiplikation 
Aber sowas ist wirklich stark Anwendungsabhängig. PHP Entwickler haben damit beispielsweise eher weniger am Hut


----------



## Skysnake (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*



bingo88 schrieb:


> Hat bei mir nicht funktioniert, die Schleife wurde schneller aufgerufen, als sich time(NULL) änderte -> Mist


 Das doch klar, dass das nicht funktioniert, wenn du das ständig aufrufst 

time(NULL) liefert die aktuelle Zeit ja nur im ms Bereich wieder... Die CPU ist da um einiges schneller. Daher kann sich da auch noch nichts geändert haben.

Es macht ja aber auch gar keinen Sinn das direkt nacheinander auf zu rufen.

Sinn macht es nur, wenn man X Zufallszahlen erzeugt hat, und dann ein neues Set an Zufallszahlen erzeugen will, die eben wieder unabhängig sind.

Bsp.: Unabhängige Geschwindigkeiten für die 3 Raumrichtungen.


----------



## bingo88 (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*



Skysnake schrieb:


> Das doch klar, dass das nicht funktioniert, wenn du das ständig aufrufst
> 
> time(NULL) liefert die aktuelle Zeit ja nur im ms Bereich wieder... Die CPU ist da um einiges schneller. Daher kann sich da auch noch nichts geändert haben.
> 
> ...


Deswegen abe ich ja gesagt, er soll es nur einmal aufrufen. Ich war mir der Problematik schon vorher bewusst


----------



## Skysnake (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*



bingo88 schrieb:


> Das Cacheline-Problem kenn ich von der Matrixmultiplikation
> Aber sowas ist wirklich stark Anwendungsabhängig. PHP Entwickler haben damit beispielsweise eher weniger am Hut



Das auch klar 

Ich würde jeden PHP Programmierer erschlagen, der sich über so etwas Gedanken macht  Das ist absolut vorbei an der Zielsetzung.

Ich programmiere halt C/C++ und OpenCL, und da halt immer mit der Zielsetzung, dass das Programm möglichst schnell läuft.

Man sollte gar nicht denken, wie oft man noch nen Faktor 2 raus holen kann aus nem Programm.

Hatte erst gestern mein Programm nochmal angeschaut und endlich ein paar inline rein geschmissen. TATA Das Programm hat statt 38 nur noch 17 Sekunden gebraucht


----------



## bingo88 (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Ist auf jeden Fall immer wieder erstaunlich. Aber ich stimme dir zu, man muss das Programm erst mal ans Laufen bekommen, danach kann man immer noch optimieren.


----------



## Fragile Heart (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Ich befürchte wir machen gerade den ganzen Thread kaput.  

Allerdings bin ich ehrlich gesagt überascht das sich hier soviel Leute antreffen lassen, die wirklich Programmieren. 

Edit:


Skysnake schrieb:


> Hatte erst gestern mein Programm nochmal  angeschaut und endlich ein paar inline rein geschmissen. TATA Das  Programm hat statt 38 nur noch 17 Sekunden gebraucht


 Ich hab mir für LinAlg damals mal ein Programm geschrieben und es  wärend der ganzen Zeit an der Uni immer weiter Optimiert. Das war zum  Schluß fast 10 mal schneller als die erste Version.


----------



## Fragile Heart (18. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Sorry, Doppelpost.


----------



## Crymes (19. Mai 2011)

Thread kaputt?
Im Gegenteil, macht Spaß mitzulesen!


----------



## Fragile Heart (19. Mai 2011)

*AW: Problem bei Programm, dass eine Datei mit bestimmter Größeerstellen soll !*

Das freut mich zu hören.  Nur solltest du einige Sachen direkt aus deinen Gedanken verbannen, denn so kommst du nie zum Ziel.

Wir haben an der Uni damals immer ein kleines Spielchen gemacht. Einer gibt ein Problem vor und die anderen stellen darauf ihre Lösungen vor, mit begründung warum sie sich dafür entschieden haben. Wäre vielleicht auch was für hier. Macht wirklich viel Spaß und man lernt eine Menge von den Gedankengängen der anderen.


----------



## Crymes (19. Mai 2011)

Man könnte ja mal einen Thread erstellen, ich hätte Lust drauf...


----------

