In der heutigen Zeit sollte man für Sicherheit durchaus viel Aufwand treiben... Spammer und Botnetze sind eine Folge dieses Schulterzuckens.
Sorry, aber das ist für mich eine typisch deutsche herangehensweise (wie die es in die IT geschafft hat, ist mir ein Rätsel
).
Denn was hier gemacht wird ist Symptom Bekämpfung und nicht die Ursachen beseitigen!
Warum sollte sich denn ein Programmierer um solche Sachen wie nen Bufferoverflow kümmern, wenn das OS es doch macht und es so auch noch performanter ist? Ich will nicht die Bequemlichkeit der Programmierer unterstützen.
Doch das ist so, die User-Space-Heap-Verwaltung wird komplett im User-Space gemacht, das OS stellt nur den virtuellen Speicher zur Verfügung.
Aber welchen Teil des virtuellen Speichers der Heap belegt, das wird halt nicht (unbedingt) im UserSpace gemacht!
Ich rede da von solchen Sachen, das man es ja auch so machen könnte das der ganze virtuelle Adressraum auch selbst vom UserSpace verwaltet wird, sprich der Code entscheidet wo ne Library hingemappt wird oder nen Stack oder halt der Heap und genau das seh ich halt nicht so (und ist sei ALR - oder wie das heißt - auch nicht mehr so und ihr wollt ja Sicherheit).
ich stelle mir vor (ohne es zu wissen) dass das die Heap-Verwaltung einfacher macht.
Wieso macht es die Heap-Verwaltung einfacher? Du musst jedes Mal auch den Fall einplanen das du den virtuellen Bereich den du haben willst nicht bekommst und wenn du den Fall eh einplanen musst, dann mach es doch gleich nur so das du den Bereich nimmst den du vom OS bekommst.
Dann sollte es eine libc sein die ebenfalls auf Deinem OS funktioniert ansonsten funktioniert das Programm einfach nicht
Das sollte eigentlich klar sein. Ich meine sowas wie ne libc von GNU und ne libc von LLVM und ne dietlibc usw. Alle können andere Algos implementieren, aber laufen auf deinem OS.
Signifikant langsamer dürfte das aber IMHO nicht werden (nur ein ganz klein Wenig weil ein paar mehr Speicherzugriffe pro malloc/free erforderlich sind).
Anders gefragt, was für eine Datenstruktur willst du denn einsetzen, dass es nicht signifikant langsamer wird (schreib aber bitte ob das nur mit deinen Segmenten funktioniert)?
Hm, na wenn das mal gut geht.
Gegenfrage, was soll denn schief gehen?
Ist den ein schnellerer SlabAllocator kein erstrebenswertes Ziel?
Du weißt doch noch die magischen 8MB
Aber ich habe gerade mal nachgerechnet, bei 4Byte pro Wert, macht das zusätzliche 1KB pro 1MB RAM pro Wert, ich denke das kann man verschmerzen
Jetzt mal was zu diesem Thema. Ich habe im Moment eine Struktur die so aussieht:
struct vmmSharedPageEntry_t {
struct spinlock_t lock;
uint32t refCount;
struct list_t *tasks;
};
Ich führe also nen refCount und ich trage die Prozesse ein, die diese Page nutzen. Das Lock ist halt zum Prozess eintragen da.
Meine Frage wäre jetzt, muss/sollte ich wirklich Buch führen wo (im Sinne von in welchem Prozess) eine physische Page überall gemappt ist?
Weil wenn nicht dann könnte ich das Lock und die Liste rausnehmen und beschleunige meinen SlabAllocator etwas
Und wie willst Du vorher bestimmen wie tief QuickSort rekursieren muss? Das einzigste Kriterium was Du hast ist die Größe der zu sortierenden Daten aber damit verschenkst Du eventuell sehr viel wenn die Daten schon einigermaßen gut sortiert sind und kaum Rekursion nötig wäre.
Ich würde abwegen, was ist langsamer/schlechter, wenn ich irgendwann feststelle das mein Stack nicht mehr reicht und ich nen iterativen Sortier-Algo einsetzen muss oder das ich genau den von dir genannten Fall in kauf nehmen und dafür das Problem mit dem Stack gelöst habe und der worst-case wesentlich schneller ist.
Die Rekursionstiefe, würde ich anhand der Datenmenge festmachen. Was würde ich denn verschenken?
Dann frage ich Dich nach einem Beispiel!
Hättest du dich nicht bei dem "du" mit einschließen können
Wenn Du bestimmte Annahmen im Vorfeld machst dann must Du auch garantieren das diese zur Laufzeit noch gültig sind. Kannst Du das in jedem Fall?
Da ich das nicht mathematisch beweisen kann, sage ich mal nein.
Als Bsp. würde ich jetzt malloc() nehmen. Wenn du alle Größen die auftreten können/werden sortieren willst wirst du wohl schonmal ne Weile brauche, machst du jetzt aber die Annahme das auch Blöcke mit den Größen der 2er Potenzen reichen, kannst du schon viel schneller und einfacher sortien, nämlich in O(1).
Du hast damit zwar unter Umständen einen tierischen Verschnitt, aber was solls