1
Softwareentwicklung / Re: Linkeroptimierung
« am: 17. June 2012, 16:32 »
Du könntest auch gcc's link-time optimization (Flag -flto) verwenden.
21. November 2024, 13:19
Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.
Was taljeth mit kaputter Kernel meint? Seine eigenen Projekte?tyndur natürlich
Dann würde ich sowas wie boost's intrusive container(s) bauen.Wie gesagt: Datenstrukturen. Zumindest ich würde meinen Monitor gegen die Wand schmeißen wenn ich die jedes Mal wieder neu implementieren müsste oder auf die Krücke void* zurückfallen würde.Wenn man keine Container braucht, sondern eingebettete Strukturen benutzen kann (und ich würde behaupten, das ist fast immer der Fall), dann kommt man in C mit ein bisschen Präprozessoreinsatz recht weit.
Okay, Templates sind sicherlich eine angenehme Sache. Aber jetzt auf die schnelle wüsste ich nichts wo ich die tief im Kernel brauchen könnte.Wie gesagt: Datenstrukturen. Zumindest ich würde meinen Monitor gegen die Wand schmeißen wenn ich die jedes Mal wieder neu implementieren müsste oder auf die Krücke void* zurückfallen würde.
Scoped-Lock ist ein nettes Design-Pattern! Aber theoretisch liese sich das einigermaßen simpel auch mit C realisieren.Ich wüsste nicht wie man das in C nachmachen würde und schon gar nicht "simpel".
Mutex mymutex;
[...]
void f([...])
{
// code außerhalb der critical section
{
scoped_lock l(mymutex); // <- ruft mymutex.lock() auf
// code innerhalb des critical section
} // <- exakt hier kommt der Destruktor von l und ruft mymutex.unlock() auf
// code außerhalb des critical section
}
Das schöne daran ist, dass es schlichtweg egal ist wie man ans Ende des Blocks kommt, es wird immer der Lock freigegeben, ohne häßliches goto + rumgehacke um den return value irgendwie dann am Ende hinzukriegen.
Hat zufällig jemand einen Lösungsansatz für dieses Problem?-mcmodel=kernel, wobei du damit auch nicht an die Adresse die du dir vorstellst kommst, sondern halt an -2GB.
Da wäre ich mir nicht so sicher, gcc hat dafür ein builtin, siehe hier. Aber keine Ahnung warum genau man das brauch, ich versteh auch nicht was es da so für Randfälle für den "member-designator" geben kann, die man eventuell mit Pointerarithmetik alleine nicht hinbekommt.Zitatoffsetof(), das ist IMHO auch deswegen nötig weil ja das tatsächliche Speicherlayout in Strukturen auch wieder implementierungsspezifisch ist. Das meistens dahinter im Endeffekt nur der selbe Hack steckt den Du auch direkt benutzen würdest ist da erst mal egal, immerhin muss dafür derjenige gerade stehen der die libc für die konkrete Plattform gebaut hat und der sollte genau wissen was geht und was nicht.Und jetzt rate mal, wie offsetof implementiert ist?
Das ist einfach ein Makro, das die Pointerarithmetik versteckt. Wenn das Makro also nicht mehr kompiliert, hast du auch kein offsetof. Als Funktion, die man dazulinken könnte, geht das nicht.
Ja, der GDB sagt, dass alles gut aussieht (vom Speicherlayout her).Nur um das ganz genau geklärt zu haben: Du schaust im gdb auch direkt vor der Stelle an der es schief läuft? Ansonsten kannst du auch mal im bochs debugger dir das direkt davor ausgeben lassen.
Wenn ich die GDT an 8-Byte ausrichte (laut Intel die optimale Position), bekomme ich einen GPF.Einen GPF bei was bzw. wann? Und was sagen die gängigen Emulatoren zum Grund des GPF? Ist die Struktur auch im Speicher korrekt (direkt vor dem GPF)?