Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.sci.informatik.misc > #371

Re: Freispeichermanagement

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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