Wie funktioniert iostream



  • tuxer schrieb:

    Müsste die nicht in Assembler geschrieben sein?

    Nein, daß muß nicht der Fall sein. Es gibt dafür zwei Möglichkeiten, erstens man verwendet die C API des OS, zweitens man kann direkt Kernelfunktionen nutzen was letztlich schneller ist. Die gcc Implementierung kannst Du Dir im Source anschauen, bei vielen anderen Compilern wird kein Sourcecode mitgeliefert, und somit läßt sich die Frage wohl nur über eine Anfrage beim Hersteller beantworten.



  • Danke 🙂

    berniebutt schrieb:

    Einfach benutzen!

    wäre schwierig ohne :p



  • printf() ?



  • T0bi schrieb:

    printf() ?

    hoffentlich nicht.

    cheers, Swordfish



  • T0bi schrieb:

    printf() ?

    ...und wie funktioniert nun printf()?... it's magic

    MfG SideWinder



  • Swordfish schrieb:

    T0bi schrieb:

    printf() ?

    hoffentlich nicht.

    cheers, Swordfish

    Wieso nicht?

    Prost, Pottwal.



  • früher ging das mit dem DOS-Interrupt ( __asm int 0x21 ).
    Man lädt die CPU-Register mit den Daten für die Funktion, die man haben will und DOS erledigt den Rest.
    Bin da aber nicht so fit.

    [ der folgende Code ist vermutlich falsch/unsinnig ]

    mov ah, 0x06 // 0x06 heißt man will Konsolen-Output
    mov dl, 'A'  // 'A' soll ausgegeben werden
    int 0x21     // DOS-Interrupt
    


  • Pottwal schrieb:

    Swordfish schrieb:

    T0bi schrieb:

    printf() ?

    hoffentlich nicht.

    cheers, Swordfish

    Wieso nicht?

    Prost, Pottwal.

    Wahrscheinlich, weil printf() C und nicht C++ ist. iostream besitzt Vorteile bezüglich der Sicherheit und hat auch moderne Funktionen.



  • SideWinder schrieb:

    T0bi schrieb:

    printf() ?

    ...und wie funktioniert nun printf()?... it's magic

    MfG SideWinder

    Das wird wiederum cout benutzen!! 🙄

    __deprecated schrieb:

    früher ging das mit dem DOS-Interrupt ( __asm int 0x21 ).
    Man lädt die CPU-Register mit den Daten für die Funktion, die man haben will und DOS erledigt den Rest.
    Bin da aber nicht so fit.

    [ der folgende Code ist vermutlich falsch/unsinnig ]

    mov ah, 0x06 // 0x06 heißt man will Konsolen-Output
    mov dl, 'A'  // 'A' soll ausgegeben werden
    int 0x21     // DOS-Interrupt
    

    Ja, so wird das letztendlich hinter der ganzen Fassade gemacht! Und es wird tatsächlich so gemacht.
    Ich frage mich nur, wie das ganze gehandhabt wird wenn man mehrere Konsolen hat?! Da muss es ja hardwaremäßig wieder ne kleine Rezeptur geben.



  • Thomy schrieb:

    Ich frage mich nur, wie das ganze gehandhabt wird wenn man mehrere Konsolen hat?! Da muss es ja hardwaremäßig wieder ne kleine Rezeptur geben.

    Was unterhalb der I/O-Streams geschieht ist schlicht sache des Betriebssystems. Die Verschiedenen Implementierungen der STL rufen vom Betriebssystem bereitgestellte Funktionen auf. Unter Windows ist das die Win32 API bzw. die NT API, unter Linux Syscalls. In letzter Konsequenz wird es unter ziemlich allen Betriebssystemen wahrscheinlich der Graphikkartentreiber sein, der die Pixel auf den Schirm bringt.

    Wie dem auch sei, C++ kümmert das nicht.

    cheers, Swordfish



  • die frage, die mich immer schon beschäftigt hat: wo zum teufel schreibt cout hin, wenn man mit C++ einen toaster programmiert?



  • queer_boy schrieb:

    die frage, die mich immer schon beschäftigt hat: wo zum teufel schreibt cout hin, wenn man mit C++ einen toaster programmiert?

    Na. Auf den Toast. Ist doch klar. 😃

    EDIT:

    http://www.theredskull.com/pics/toast.jpg

    Hier lief das Programm:

    #include <iostream>
    int toast = 0;
    int main ()
    {
    std::cout << "TOAST";
    return toast;
    }
    


  • ich glaube queer_boy meint wie man elektrische Schaltungen Programmiert 😮


Anmelden zum Antworten