was bedeutet das Teilen durch die Größe von (void *)?

8

Ich arbeite mit Hashtabellen und bin auf diese Funktion gestoßen. Aber was bedeutet hash / sizeof (void *)? und der Kommentar danach - loswerden von bekannten 0 Bits?

%Vor%     
annunarcist 24.10.2013, 13:56
quelle

2 Antworten

9

Auf den meisten Computern und ABIs sind die Zeiger normalerweise wortorientiert. Das Teilen durch die sizeof -Zeiger ignoriert im wesentlichen die kleinsten Bits (z. B. sind 3 niedrigste Bits von Byte-Adressen bei den meisten 64-Bit-Prozessoren 0, da ein 64-Bit-Wort 8 Bytes von jeweils 8 Bits hat).

    
Basile Starynkevitch 24.10.2013, 13:59
quelle
2

Es sieht so aus, als ob es eine Funktion ist, einen Zeiger zu hashen. Zeiger zeigen auf Objekte, die oft ausgerichtet sind. Wenn das Objekt, auf das gezeigt wird, mit "neu" belegt ist, ist es am wahrscheinlichsten, dass es an der Wortgrenze ausgerichtet ist.

Daher kann es möglicherweise immer durch 8 teilbar sein (oder 4 wenn das die Wortgröße ist) (wenn es in eine Zahl umgewandelt wird) und die Funktion teilt Ihre Zahl mit 8, um Ihnen das zu geben, was wirklich wichtig ist.

    
CashCow 24.10.2013 14:05
quelle

Tags und Links