Wieso ist 0x00400000 die Basisadresse für EXE übersetzung

Posted in Programmierung

,

Die Basisadresse für DLL ist 0x10000000, aber für ausführbare Dateien ist es 0x00400000. Warum dieser besondere Wert für EXE? Was ist so besonders an 4 Megabyte?

Das hat etwas mit der Größe des Adressraumes zu tun, welche als eine Seiten-Tabelle in der x86 Architektur angezeigt wird, und auf ein Design aus dem Jahr 1987 zurückgeht.

Die einzige technische Anforderung an die Basisadresse von EXE ist, dass es ein Vielfaches von 64 KB sein muss. Aber einige Varianten der Basisadresse sind besser, als andere.

Das Ziel der Auswahl der Basisadresse besteht in der Minimierung der Wahrscheinlichkeit, dass die Module verschoben werden. Das bedeutet, dass man den Zusammenstoß mit 1) anderen Objekten, die bereits im Adressraum existieren (was auch eine Verschiebung hervorrufen wird), und 2) mit Objekten, die später im Adressraum erscheinen können (und somit deren Verschiebung forcieren), verhindern soll. Das bedeutet für ausführbare Dateien, dass man einen Konflikt zwischen Objekten, die später erscheinen können, verhindert, indem man die Region des Adressraums vermeidet, welcher mit DLL-Bibliotheken gefüllt werden kann. Da das Betriebssystem selbst die DLL-Dateien in ältere Adressen verschiebt und die Basisadresse für betriebssystemfremde DLLs 0x10000000 ist, muss die Basisadresse für EXE kleiner als 0x10000000 sein, und je kleiner sie ist, desto mehr Platz bleibt bis zu dem Zeitpunkt, an dem Sie einen Konflikt mit den Bibliotheken haben werden. Aber wie niedrig sollte man gehen?

Weiterlesen →

Reise durch den Stack. Teil 1 übersetzung

Posted in C, Programmierung

,

Reise durch den Stack. Teil 1

In den vorherigen Artikeln haben wir uns die Platzierung des Programms im Speicher angeschaut – eines der zentralen Konzepte, die die Ausführung der Programme in den Computern betreffen. Wenden wir uns jetzt an den Aufruf-Stack – dem Zugpferd der meisten Programmiersprachen und virtuellen Maschinen. Auf uns wartet die Bekanntschaft mit erstaunlichen Sachen, wie Funktionsabschlüsse, Puffer-Überlastung und Rekursion. Aber alles zu seiner Zeit – am Anfang müssen wir uns eine grundlegende Vorstellung davon verschaffen, wie ein Stack funktioniert.

Weiterlesen →

Organisation des Prozess-Speichers übersetzung

Posted in Programmierung

,

Organisation des Prozess-Speichers

Speicher-Steuerung ist ein zentraler Aspekt bei der Arbeit von Betriebssystemen. Sie ist sowohl für die Programmierung als auch für die Systemadministration notwendig. In einigen weiteren Artikeln werde ich mich mit den Fragen beschäftigen, die mit der Arbeit des Speichers verbunden sind. Der Schwerpunkt wird auf die praktischen Aspekte gelegt, aber auch die Details des inneren Aufbaus werden wir dabei nicht ignorieren. Die zu untersuchenden Konzepte sind ziemlich allgemein, werden aber am Beispiel von Linux und Windows illustriert, die auf einem x86-32 Computer ausgeführt werden. Der erste Artikel beschreibt die Organisation des Speichers von Benutzer-Prozessen.

Weiterlesen →

Das Verstehen und die Arbeit mit den Daten in WordPress. Teil 1. Einführung tutorial übersetzung

Posted in MySQL, Webentwicklung, WordPress

,

Das Verstehen und die Arbeit mit den Daten in WordPress. Teil 1. Einführung

Dieser Artikel ist die Übersetzung des ersten Artikels von Rachel McCollin aus dem Zyklus über die Daten in WordPress. Hier wird die Datenstruktur, Inhaltsarten und deren Zusammenhang in WordPress durchgenommen. Es ist in erster Linie für Anfänger nützlich, aber auch die Profis können hier etwas Neues für sich finden.



Weiterlesen →

«Diamond-Square» Algorithmus zum Aufbau fraktaler Landschaften übersetzung

Posted in Algorithmen

,

«Diamond-Square» Algorithmus zum Aufbau fraktaler LandschaftenIch glaube, viele sind mit dem ungewöhnlichen Spiel Minecraft bekannt (rechts – eine generierte Beispielkarte), in dem sich der Spieler auf einer (fast) unendlichen Erdoberfläche befindet und die Umwelt mit minimalen Begrenzungen erforschen kann.

Wie hat es denn der Autor des Spiels, Notch, geschafft, so eine Übereinstimmung seiner zufälligen „Welten“ mit den echten Erdlandschaften zu erhalten? In diesem Artikel werde ich eine der Methoden beschreiben, so eine künstliche Landschaft zu erstellen (und erwähne nebenbei ein paar andere Tricks), und erzähle auch über meine persönliche kleine Verbesserung des Algorithmus, welche es erlaubt, die Größe der Landschaft ohne Leistungsverlust deutlich zu erhöhen.

Im Artikel warten einige Schemen und schöne Bilder auf Sie, sowie viele Buchstaben und ein Link zu einem Realisierungsbeispiel dieses Algorithmus.

Weiterlesen →

Wie man MySQL für Wordpress optimiert

Posted in MySQL, WordPress

,

Die Effizienz der Einstellung von MySQL kann die Arbeitskapazität der Webseite unter Wordpress wesentlich beeinflussen. Soweit Wordpress InnoDB Tabellen einsetzt, muss man den MySQL Server für die optimale Arbeit mit diesen Tabellen einstellen. Öffnen Sie die Datei my.cnf (gewöhnlich /etc/my.cnf) und verändern Sie folgende Einstellungen. In unserem Fall konfigurieren wir MySQL für den Server mit einem Kern und 512MB des Hauptspeichers, unter dem auch PHP und MySQL läuft.

max_connections = 64

Die maximale Anzahl an Verbindungen sollte man gemäß der Belastung und Anzahl an Kernen auswählen, aber es wäre besser mit 64 zu beginnen.

Weiterlesen →

Optimale MySQL Konfiguration

Posted in MySQL

,

Die Konfigurationsparameter in MySQL sind standardmäßig auf kleine Datenbanken ausgelegt, die unter geringer Belastung und mit recht einfacher Hardware laufen. Wenn Ihre Pläne im Hinblick auf MySQL die Tabellengrenzen für einige hundert Einträge überschreiten, müssen Sie unbedingt die Default-Werte ändern.

Die optimale Einstellung von MySQL besteht aus zwei Teilen — Ersteinstellung und Korrektur der Parameter während der Arbeit. Die Korrektur der Parameter im Operationsmodus ist in vieler Hinsicht von den Besonderheiten Ihres Systems und Ihres Monitorings abhängig — hier gibt es keine besonderen Regeln. Für die Starteinstellung gibt es eine Reihe von Tipps:

Weiterlesen →

Darf ich vorstellen – Swift!

Posted in iOS-Programmierung, Swift

,

Am 2. Juni hat Apple auf der WWDC Konferenz 2014 eine neue objektorientierte Programmiersprache vorgestellt – Swift. Ich glaube, dass viele sie sich bereits angeschaut haben und daher wissen, wie diese Sprache aussieht, deshalb werde ich mich nicht mit Neuerungen aufhalten. Ich schlage vor, ein einfaches Projekt in Swift zu erstellen, um die wichtigsten Unterschiede zum gewohnten Obj-C zu verstehen.

Darf ich vorstellen – Swift!

Weiterlesen →

Skalieren von Elasticsearch am Beispiel eines Clusters mit Indexen von mehreren Terabytes

Posted in Big Data, Datenbankverwaltung, Serverseitige Optimierung

,

Niedrige Geschwindigkeit der Suchanfragen

Als wir an der Suchengine für soziale Informationen arbeiteten, entschieden wir uns für Elasticsearch, denn den Kommentaren zufolge war es sehr einfach einzustellen und zu benutzen, hatte hervorragende Suchmöglichkeiten und sah insgesamt wie ein Geschenk Gottes aus. So war es auch, bis sich unser Index zu einer beachtlichen Größe von circa 1 Milliarde ausbreitete und zusammen mit den Repliken über 1,5 TB groß wurde.

Sogar ein banaler Term query konnte Dutzende an Sekunden in Anspruch nehmen. Es gibt nicht so viele Dokumentationen, wie man es gerne hätte und das Googeln dieser Anfrage gab Antworten von vor 2 Jahren zu den überhaupt nicht mehr aktuellen Versionen unserer Suchengines aus (wir arbeiten mit 0.90.13 – was auch keine allzu alte Sache ist, aber wir können es uns im Moment nicht leisten, das ganzen Cluster zu aktualisieren und neu zu starten – nur Rolling-Neustarts).

Niedrige Indexierungsgeschwindigkeit

Das zweite Problem – wir indexieren mehr Dokumente pro Sekunde (circa 100 Tausend), als Elasticsearch bearbeiten kann. Time-Outs, riesige Belastung auf WriteIO, Prozess-Warteschlangen von 400 Einheiten. Das sieht alles sehr schrecklich aus, wenn man es sich in Marvel anschaut.

Wie man diese Probleme löst – siehe unten.

Weiterlesen →

Ein gutes Userinterface. Teil 3 übersetzung

Posted in Webdesign

,

Idee 28

Benutzen Sie standardmäßige Varianten und vermeiden Sie zusätzliche Arbeit für den Benutzer.

Eine standardmäßige Auswahl oder eigenständig ausfüllende Felder mit fundierten Vermutungen verkürzen den Arbeitsumfang für den Benutzer. Das ist eine normale Technik, die den Menschen dabei hilft, sich schneller durch die Formulare zu bewegen, wenn man bedenkt, dass deren Zeit begrenzt ist. Eines der unangenehmsten Dinge aus Sichtweise des Userinterface-Designs und der Konversionsrate ist es, die Besucher immer und immer wieder Daten eingeben zu lassen, die sie bereits früher angegeben haben. Versuchen Sie, Felder zu gestalten, die sich selbst mit den populärsten oder bereits bekannten Werten ausfüllen, anstatt die Benutzer immer wieder danach zu fragen, sie auszufüllen. Je weniger Arbeit desto besser.

Ein gutes Userinterface. Teil 3

Weiterlesen →