Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.sci.informatik.misc > #371
| From | Andreas Wagner <andreasw-usenet@web.de> |
|---|---|
| Newsgroups | de.sci.informatik.misc |
| Subject | Re: Freispeichermanagement |
| Date | 2022-12-15 01:40 +0100 |
| Message-ID | <jvv8nbF3jfoU1@mid.individual.net> (permalink) |
| References | <jvr0o1Fdr6vU1@mid.individual.net> <tnag8q.4to.1@stefan.msgid.phost.de> <jvs1hhFin2bU4@mid.individual.net> <tnd9n5.5gc.1@stefan.msgid.phost.de> |
Hallo Stefan!
Am 14.12.2022 um 19:55 schrieb Stefan Reuther:
> Wenn wir das mal mit RAM statt Datei durchspielen, meinte ich verstanden
> zu haben, dass dir sowas vorschwebt:
>
> struct Node {
> struct Node* left;
> struct Node* right;
> int payload;
> };
Ich würde parent mit hinzunehmen. Den braucht man zum Rebalancieren.
>
> void store(struct Node* root, int payload)
> {
> struct Node* new_node = malloc(sizeof(struct Node));
> new_node->payload = payload;
> // hier den Knoten einketten, also z.B.
> new_node->left = root->left;
> root->left = new_node;
Das hängt das ja nicht in einen Binärbaum ein. Ich kann dir hier nicht
folgen.
> // (AVL-tree-insert bekomm ich aus dem Kopf jetzt nicht hin)
> }
>
> // und zum Freigeben von Speicher dann
> store(addrlist_root, address);
> store(sizelist_root, size);
free_spaces_by_pos.store(&new_node, new_node.get_payload_size());
free_spaces_by_size(new_node.get_payload_size(), &new_node);
ist ungefähr, was ich gemacht habe.
> Ich meine, pack die Metadaten direkt in die Speicherblöcke, so dass
> keine separate Allokation notwendig ist:
>
> struct FreeBlock {
> // ...hier Headerinformationen, falls du welche brauchst
> struct Node in_addrlist;
> struct Node in_sizelist;
> };
Wenn die Payload überschrieben ist, habe ich kein brauchbares
Sortierkriterium mehr.
> void insertNode(struct Node* root, struct Node* node)
> {
> // hier nur das Einketten
> node->left = root->left;
> root->left = node;
> }
> // und zum Freigeben von Speicher dann
> struct FreeBlock* p = (struct FreeBlock*) address;
> p->in_addrlist.payload = address;
> insertNode(addrlist_root, &p->in_addrlist);
> p->in_sizelist.payload = size;
> insertNode(sizelist_root, &p->in_sizelist);
Wie sind hie address und size definiert?
Was meine bisherige Implementierung angeht, hätte ich wohl in
de.sci.med.psychiatrie zu posten. Die macht wirklich nicht mehr das, was
ich programmiert habe.
Grüße
Andreas
Back to de.sci.informatik.misc | Previous | Next — Previous in thread | Next in thread | Find similar
Freispeichermanagement Andreas Wagner <andreasw-usenet@web.de> - 2022-12-13 09:59 +0000
Re: Freispeichermanagement Stefan Reuther <stefan.news@arcor.de> - 2022-12-13 18:28 +0100
Re: Freispeichermanagement Andreas Wagner <andreasw-usenet@web.de> - 2022-12-13 20:19 +0100
Re: Freispeichermanagement Stefan Reuther <stefan.news@arcor.de> - 2022-12-14 19:55 +0100
Re: Freispeichermanagement Andreas Wagner <andreasw-usenet@web.de> - 2022-12-15 01:40 +0100
Re: Freispeichermanagement Stefan Reuther <stefan.news@arcor.de> - 2022-12-15 11:30 +0100
Re: Freispeichermanagement Andreas Wagner <andreasw-usenet@web.de> - 2022-12-18 11:28 +0000
csiph-web