Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

Compileroptimierung für bestimmte codebereiche deaktivieren

Synthetic_codes / 2 Antworten / Flachansicht Nickles

Moinsen allseits. Der Titel sagt eigentlich schon alles, aber hier nochmal mit erklärung:

Es geht darum, die Compileroptimierungen für einen bestimmten codebereich zu deaktivieren. Insbesorndere habe ich eine Stelle in einem Programm in dem 50sec gewartet werden muss. dort habe ich es per schleife gelöst, dass alle 5 sec eine meldung ausgegeben wird, wie lange noch zu warten ist:

for(ct=0;ct<10;ct++)
{
printf("Noch %d sekunden.\n",50-(ct*5));
sleep(5);
}

Der Compiler "optimiert" an dieser stelle alles so zusammen, dass 50 sec gewartet wird, und dann alle printf-meldungen ausgegeben werden. Da ich an anderer stelle auf diese optimierungen angewiesen bin, möchte ich selbige aber nur teilweise anwenden. Btw, Compiler ist der gcc-4.3

Noch eine 2. Frage: Mir ist aufgefallen, dass C bei funktionsaufrufen immer den selben datenbereich verwendet. sprich, habe ich eine funktion, in der eine Variable definiert wird, so ist diese beim nächsten aufruf der Funktion noch gesetzt. Wenn ich (p)Threads verwende, wird dann für jeden Thread ein neuer Datenbereich angelegt? oder muss ich hier zwangsläufig mit dynamischer Speicherzuweisung arbeiten?

'); DROP TABLE users;--
bei Antwort benachrichtigen
Mdl Synthetic_codes „Compileroptimierung für bestimmte codebereiche deaktivieren“
Optionen

Zur 2. Frage:

(Nichtstatische) Variablen, die innerhalb einer Funktion definiert werden, werden auf dem Stack abgelegt. Damit sind ja dann auch rekursive Aufrufe möglich, ohne dass sich die einzelnen Instanzen in die Quere kommen.

> Mir ist aufgefallen, dass C bei funktionsaufrufen immer den selben datenbereich verwendet. sprich, habe ich eine funktion, in der eine Variable definiert wird, so ist diese beim nächsten aufruf der Funktion noch gesetzt.

Lokale Variablen werden in C bei ihrer Deklaration (ohne Zuweisung) nicht vorbelegt.
Wenn der Stack nicht überschrieben wurde, z.B. durch den zwischenzeitlichen Aufruf einer zweiten Fkt., so sind darauf noch die alten Werte. Dies aber in irgendeiner Weise im Prg. als sicher anzunehmen ist selbstredend ein No-Go...

Obwohl ich erst einmal (vor längerer Zeit) was mit Multi-Threads gemacht habe, bin ich mir sicher, dass jede Funktionsinstanz einen separaten Datenbereich (analog zu rekursiven Funktionsaufrufen) erhält. Das Problem bei parallel ablaufenden Funktionen ist immer der Zugriff auf globale - und in einer Funktion definierte statische Variablen werden auch wie solche gehandhabt - Daten.

Gruß,

Mdl

bei Antwort benachrichtigen