Name für Handle-Klasse gesucht



  • Ich würde es einfach PageHandle nennen. Das sorgt für weniger Mehrdeutigkeiten.



  • Oder ein Begriff, mit dem du den Bezug zum Speicher klar machst? "Handle" finde ich ein wenig sehr allgemein und nichtssagend.

    Also so etwas wie MemoryBlockInformation oder so? Vielleicht auch in Richtung "Manager" oder "Data"...



  • Bitte seid nicht enttäuscht, daß ich nicht zu den Namen zwischendurch antworte. Ich will viel Input bekommen, ohne ihn zu verfälschen, sozusagen Brainstorming.
    Was ich aber sagen kann, ist, daß ich seit bestimmt fünf Jahren mit dieser Frage schwanger gehe und jetzt endlich mal Nägel mit Köpfen machen will.



  • Seh ich das richtig, dass ein Kunde der Klasse mit deinem Handle nichts wirklich anstellen kann? (Außer Erstellen und Vernichten - und Kopieren?) Wie beim Windows-HANDLE auch? Dann stimme ich _matze und Nanyuki zu. Das ist doch genau das, was man von einem Handle erwartet, also sollte die Klasse auch so heißen.

    Interessant finde ich, warum du Alternativen a) und b) nicht magst. Was spricht für c) und gegen die beiden Anderen? Sicherheitsbedenken? Ich finde insbesondere a) auf Anhieb viel plausibler als c). Erklärst du bitte, warum du das anders siehst?

    Neugierig:
    Stefan.


  • Mod

    volkard schrieb:

    Meine Klasse hingegen hat Konstruktor und Destruktor, die ganz schlaue und teilweise teure Dinge machen.

    Welche? Ich schlage mal -descriptor oder -token vor. Je nach Funktion fällt eventuell noch mehr ein.



  • DStefan schrieb:

    Seh ich das richtig, dass ein Kunde der Klasse mit deinem Handle nichts wirklich anstellen kann? (Außer Erstellen und Vernichten - und Kopieren?) Wie beim Windows-HANDLE auch?

    Sogar nur Erstellen und Vernichten und nach dem Speicher fragen, der verwaltet wird.

    Interessant finde ich, warum du Alternativen a) und b) nicht magst. Was spricht für c) und gegen die beiden Anderen? Sicherheitsbedenken? Ich finde insbesondere a) auf Anhieb viel plausibler als c). Erklärst du bitte, warum du das anders siehst?

    Gar keine Sicherheitsbedenken.
    Vom BS bekomme ich extrem schnell 4K Speicher, bzw 64k oder 128M, den ich leicht auf 4K-Blöcke runterbrechen kann, das ist eine Geschichte von wenigen Takten.
    Gegen b) spricht beim Baum, daß ich schnell hundert Takte brauche.
    Und bei der Hashtable die zu jeden Zugriff nötige integer-Multiplikation und die lustigen Probleme, wenn die Hashtabble wachsen muß, daß sie nicht billig schrumpfen kann und daß sie nicht gut vom eigenen 4k-Allokator getragen werden kann. Daran hatte ich mir schonmal eine blutige Nase geholt. Auch wenn ich sicher bin, daß ich jetzt stark genug bin, es hinzubekommen, fühlt es sich nicht schnell an.
    Gegen a) spricht, daß ich viele Anwendungen kenne, wo genau 4096 Bytes Nutzdaten (oder demnächst 8192 Bytes auf 64-Bittern) kleine Vorteile haben. Zum Beispiel die Dateipuffergröße ist Teiler der Dateisystemclustergröße und ein ReadFile wird nie auf zwei Cluster zugreifen müssen. Hashtables mit einer Zweierpozenz als Größe haben ein schnelles pos=hash(key)%SIZE;. 4k-Seiten-basierte Container können davon profitieren, daß eine in den Seiten liegende Heap-Struktur die Höhe voll ausnutz. Manche wirre WinAPI-Funktionen mag 4k-ausgerichteten genau 4k großen Speicher. Ich will auch experimentieren mit 4k-Seiten-Basierten Containern, da würde a) vielleicht dafür sorgen, daß beim Ausketten der Seite längst ausgelagerte Seiten reinhüpfen, was gegen a) und für b) oder c) spricht. Ich will darum 4096 Bytes Nutzdaten haben und nicht nur 4064 Bytes.

    Auf die Idee bin ich heute gekommen, nachdem ich gestern überlegte, wie es wohl wäre, a) zu Implementieren, aber zur Abwechslung mal dem Benutzer gegenüber die Details nicht komplett zu verstecken.

    class PageBase
    {
       Page* prev;
       Page* pred;
       BigBlock* myBigBlock;//mem vom BS
       ...
       void* operator new(size_t size)
       {
          assert(size<=4096);
          //ausketten aus der freelist, ggfls davor neuen BigBlock holen
          Page* result=globalCurrentBigBlock->allocPage();
          result->myBigBlock=globalCurrentBigBlock;
          ...
       }
       ...
    };
    template<typename T>
    class StackPage:public Page
    {
       //ein wenig Verwaltungsdaten geerbt
       size_t const size=(4096-sizeof(PageBase))/sizeof(T);//TODO: alignment
       T data[size];
       ...
    };
    

    Also a) mit Offenlegung.
    Und das führte heute zur Idee von b) mit Offenlegung, wobei ich das mapping einspare.

    Und es ist nur ein Experiment. Kann sein, daß ich mir wieder eine blutige Nase hole. Aber ich muß c) austesten und mal ein Programm bauen, das ich gegen übliche Ansätze ausmessen kann. Ich verspreche mir eigentlich recht viel davon.



  • camper schrieb:

    volkard schrieb:

    Meine Klasse hingegen hat Konstruktor und Destruktor, die ganz schlaue und teilweise teure Dinge machen.

    Welche?

    Speicher besorgen. Speicher freigeben, aber falls Speicher im anderen Thread besorgt wurde, nur in dessen freigebe-Pipe schreiben, Pipapo, wird sich noch ergeben.



  • Ich würde deine Page nach RawPage umbenennen, und das "PageHandle" dann Page nennen.

    Ansonsten...

    ManagedPage
    PageDescriptor
    PageHandle
    PageAllocation



  • Ich bin bei hustbaer: ich würde das alte Page umbennenen und die Klasse Page nennen. Aber das vielleicht auch aus unbewusster Tipfaulheit.

    Wenn das Wort noch frei ist, könnte man statt RawPage vielleicht auch Block sagen.

    Wenn Page als Klassenname aber nicht geht, wäre mein erster Brainstorm MemoryPage.



  • volkard, dürfen wir erfahren, wofür du dich entschieden hast? 🙂



  • Nexus schrieb:

    volkard, dürfen wir erfahren, wofür du dich entschieden hast? 🙂

    Wie ich ihn kenne, hat er alles über den Haufen geschmissen und das Problem völlig anderst gelöst.. :p



  • drakon schrieb:

    Nexus schrieb:

    volkard, dürfen wir erfahren, wofür du dich entschieden hast? 🙂

    Wie ich ihn kenne, hat er alles über den Haufen geschmissen und das Problem völlig anderst gelöst.. :p

    😃 👍



  • Falls es noch interessiert:
    Nur "Page" finde ich zu kurz. Als Alternative zu "Page" kenne ich noch "Frame". Also dann PageFrame, MemFrame.

    Ansonsten vielleicht noch MemChunk oder MemBlock (verrät nicht die Größe von 4K). -Handle finde ich nicht so gut, zu allgemein. -Descriptor finde ich aber gut.

    Am wohlklingendsten finde ich "ManagedPage" (hustbaer) und "PageFrame" 🙂



  • @Badestrand:
    Bist du sicher dass das Wort Frame in dem Zusammenhang verwendet wird?
    Ich kenn das nur auf dem A/V Bereich (Video-Frame, seltener auch Audio-Frame).



  • hustbaer schrieb:

    Bist du sicher dass das Wort Frame in dem Zusammenhang verwendet wird?

    Hab gerade mal gesucht, hast Recht, scheint nur halbwegs zu stimmen, bezeichnet wohl die physische Seite. Die englische Wikipedia schreibt "Frames are fixed sized blocks in physical memory space analogous to Page (computing) in logical address space in computer architecture".


Anmelden zum Antworten