![]() |
|
|
|||||||
| Portal | Wiki | IRC-Chat | Registrieren | Benutzerliste | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
![]() |
|
|
Themen-Optionen | Thema bewerten | Ansicht |
|
|
#1 |
|
Bicycle User
Registrierungsdatum: Aug 2004
Ort: nuernberg
Beiträge: 2.532
|
[C]unitialisierte variablen
herakles hatte in http://www.bsdforen.de/showthread.php?t=28112 den wunsch geaeussert einen neuen thread dazu aufzumachen. dort ist eine diskussion leicht off topic geworden.
ausgangspunkt war folgender code Code:
Code:
Code:
bei aeltern, und auch bei einigen selbstgestrickten im embedded bereich kann es allerdings vorkommen dass diese variable muell enthaelt. wo kommt dieser muell her? antwort: vom stack. lokale variablen werden dort angelegt. nehmen wir mal an dass der stack im system bei 0x40001000 beginnt und in richtung kleiner werdende adresen waechst. Code:
__________________
Computer science is not about using a computer. It is about unleashing its powers. |
|
|
|
|
|
#2 |
|
Parasprite
|
8051 C-Compiler verwenden nur für Interrupts und reentrant Funktionen (Funktionen, die mehrmals aufgerufen werden können) einen Stack, push und pop sind dort sehr teuer.
Stattdessen wird ein Call-Tree angelegt und allen Variablen werden feste Speicheradressen zugewiesen. Durch den Call-Tree wird ermittelt welche Funktionen nie gleichzeitig aufgerufen werden, deren Variablen können den gleichen Speicher verwenden (so genanntes Overlaying). Nicht initialsierte Variablen werden aber immer mit fetten Warnings von den Compilern quittiert.
__________________
[ bsdlogo 2.0 - Wiki - Ports - LibreOffice Pakete - PM schreiben - kamikaze@bsdforen.de ]
Disclaimer: My posts represent my perception. Errors and incompleteness are to be expected, I deny any responsibility to know everything. |
|
|
|
|
|
#3 |
|
rm -rf /*
Registrierungsdatum: Jun 2008
Ort: Bremen
Beiträge: 1.074
|
Kamikaze: Wer freiwillig einen 8051 programmiert schiebt sich auch freiwillig glühende Eisen in den Arsch.
|
|
|
|
|
|
#4 |
|
Bicycle User
Registrierungsdatum: Aug 2004
Ort: nuernberg
Beiträge: 2.532
|
@kamikaze: ah! wusste ich noch nicht. aber gut, das ist im prinzip ein "stack zur compilezeit". deckt sich mit meinem beispiel.
@crest: du, manchmal kann man sich seine umgebung nicht aussuchen. ein 8051 hat bei mir auf der arbeit schon ein problem geloest fuer das wir sonst 15000 euro fuer eine "professionellere" variante gezahlt haetten. ![]()
__________________
Computer science is not about using a computer. It is about unleashing its powers. |
|
|
|
|
|
#5 | ||
|
Parasprite
|
Zitat:
![]() Zitat:
Bei einem Interrupt sichern die Compiler alle Rn-Register (8 Stück), macht beim XC878 (den ich benutze) 64 Takte (~2.7µs) bloß zum pushen und poppen. Dafür gibt es Register-Bänke, je Interrupt Priorität braucht man eine weitere, damit sich die Interrupts nicht gegenseitig ins Gehege kommen können. Natürlich verliert man mit jeder Register Bank 8 Byte Speicher - ein hoher Preis wenn man nur 256 Byte internen Speicher hat. Und die Register liegen auch noch in den 128 Byte direkt addressierbaren (und damit schnelleren) Speicher.
__________________
[ bsdlogo 2.0 - Wiki - Ports - LibreOffice Pakete - PM schreiben - kamikaze@bsdforen.de ]
Disclaimer: My posts represent my perception. Errors and incompleteness are to be expected, I deny any responsibility to know everything. |
||
|
|
|
|
|
#6 | |||
|
Registered User
Registrierungsdatum: Apr 2004
Beiträge: 267
|
Zitat:
Nur statische (globale) Variablen werden mit 0 (des entsprechenden Typs) initialisiert. Manche Übersetzer nutzen uninitialisierte Werte auch (völlig von der Norm abgesegnet) zum Optimieren: undef + 1 -> undef, undef * 0 -> undef (sic), undef & 0 -> undef (sic). Zitat:
Zitat:
|
|||
|
|
|
|
|
#7 | ||||
|
Bicycle User
Registrierungsdatum: Aug 2004
Ort: nuernberg
Beiträge: 2.532
|
Zitat:
![]() Zitat:
Zitat:
Zitat:
Code:
__________________
Computer science is not about using a computer. It is about unleashing its powers. Geändert von dettus (11.08.2012 um 00:07 Uhr). |
||||
|
|
|
|
|
#8 |
|
Parasprite
|
Oh, wir kriegen unseren eigenen BSDForen.de Bikeshed! Ob's jetzt wohl einen green IT Preis gewinnen?
__________________
[ bsdlogo 2.0 - Wiki - Ports - LibreOffice Pakete - PM schreiben - kamikaze@bsdforen.de ]
Disclaimer: My posts represent my perception. Errors and incompleteness are to be expected, I deny any responsibility to know everything. |
|
|
|
|
|
#9 | |||
|
Registered User
Registrierungsdatum: Apr 2004
Beiträge: 267
|
Nur den einzelnen Satz aus dem Kontext gerissen, hast du irgendwie recht. Mit Kontext ist diese Entgegnung sinnfrei.
Zitat:
Unterm Strich bleibt schlicht: Die Sprachspezifikation sagt, das Verhalten ist undefiniert, was der wichtige Aspekt ist. Was eine zufällige (und auch nicht genannte) Implementierung tut ist einfach egal. Zitat:
Zitat:
|
|||
|
|
|
|
|
#10 |
|
Bicycle User
Registrierungsdatum: Aug 2004
Ort: nuernberg
Beiträge: 2.532
|
also, in meinem beispiel kams vom stack.
![]() hast du ein besseres?
__________________
Computer science is not about using a computer. It is about unleashing its powers. |
|
|
|
|
|
#11 | |
|
Registered User
Registrierungsdatum: Apr 2004
Beiträge: 267
|
Liest du eigentlich, was ich schreibe?
Nochmals mit Betonung: Zitat:
|
|
|
|
|
|
|
#12 |
|
Bicycle User
Registrierungsdatum: Aug 2004
Ort: nuernberg
Beiträge: 2.532
|
oehm... liest du was ich schreibe? ich habe von muell geschrieben der in einem konkreten beispiel vom stack kommt. wovon schreibst du?
__________________
Computer science is not about using a computer. It is about unleashing its powers. |
|
|
|
![]() |
| Dieses Thema betrachten zurzeit 1 Personen. (0 registrierte Benutzer und 1 Gäste) | |
| Themen-Optionen | |
| Ansicht | Thema bewerten |
|
|
Ähnliche Themen
|
||||
| Thema | Erstellt von | Forum | Antworten | Letzter Beitrag |
| [C] Variablen initialisieren | Herakles | Programmieren | 10 | 10.11.2010 16:48 |
| NO_??? Make Variablen | FreeBSDuser | FreeBSD - Installation | 3 | 15.05.2007 19:11 |
| lokale Variablen in awk | Kamikaze | Programmieren | 4 | 17.07.2006 17:12 |
| Variablen in make "unsetten" | cirad | FreeBSD - Anwendungen und Ports | 2 | 14.12.2003 07:55 |
| make / portinstall mehrere Variablen auf einmal übergeben? | I.MC | FreeBSD - Installation | 2 | 22.11.2003 12:50 |