Lernen Sie x86-64 Assembly, indem Sie eine GUI von Grund auf neu schreiben

2025-09-16

Dieser Artikel beschreibt den Weg des Autors, die x86-64-Assembler-Sprache zu lernen, indem er ein einfaches GUI-Programm erstellt. Beginnend mit einem einfachen Beendigungsprogramm erklärt der Autor schrittweise Systemaufrufe, Stapeloperationen, das X11-Protokoll und mehr und erreicht schließlich ein Fenster, das "Hallo Welt!" in einer Binärdatei unter 1 KB anzeigt. Der Artikel ist gut strukturiert und eignet sich für Leser mit etwas Programmiererfahrung.

Mehr lesen
Entwicklung GUI-Programmierung

Mein Debug-Build 100-mal schneller machen: SIMD und dedizierte Hardware zur Rettung

2025-02-18

Bei der Entwicklung einer C-basierten Torrent-Anwendung stieß der Autor auf eine zu lange Startzeit des Debug-Builds (20–30 Sekunden). Dies lag hauptsächlich an der Überprüfung der SHA1-Hashwerte für jedes heruntergeladene Dateistück beim Programmstart, die durch Address Sanitizer im Debug-Modus deutlich verlangsamt wurde. Der Artikel untersucht verschiedene Optimierungstechniken, darunter die Verwendung von SIMD-Instruktionen und der dedizierten SHA-Hardwarebeschleunigung der CPU. Letztendlich wurde durch die Verwendung des Intel SHA-Erweiterungssatzes die Startzeit auf 866,9 Millisekunden reduziert, was eine 100-fache Performance-Steigerung bedeutet. Der Artikel beschreibt detailliert die Implementierung und den Leistungsvergleich verschiedener Optimierungsansätze und diskutiert die Compileroptimierung und die Auswirkungen der Festplatten-E/A.

Mehr lesen
Entwicklung

Die schwer fassbare plattformübergreifende Timer-API: Eine Reise durch Betriebssystem-APIs

2025-02-06

Dieser Artikel untersucht die Herausforderungen plattformübergreifender Timer-APIs in der C-Programmierung. Der Autor entdeckt, dass verschiedene Unix-Systeme (einschließlich Linux, FreeBSD, NetBSD usw.) Timer auf sehr unterschiedliche Weise handhaben. Die POSIX-Funktion timer_create, die auf Signalen basiert, weist zahlreiche Probleme auf, wie z. B. schlechte Interoperabilität mit anderen Betriebssystem-Primitiven und Signalmaskenstörungen. Der Artikel untersucht die Vor- und Nachteile verschiedener Lösungen, darunter timerfd_create, kqueue, port_create und io_uring, und kommt zu dem Schluss, dass für plattformübergreifende Anwendungen die Implementierung von Timern im Userspace, wie es libuv tut, ein effizienterer und zuverlässigerer Ansatz ist. Libuv verwendet eine Min-Heap-Datenstruktur zur Verwaltung von Timern und verwendet Systemaufrufe wie poll/epoll/kqueue für das Multiplexing.

Mehr lesen